查询的日期格式与结果中的日期格式不同
Date format on query different from date format in result
我写了一个 SQL 查询以获得从 2016 年 4 月 1 日到 2016 年 5 月 1 日的结果。
当我写道:
where a.DateIntervention >= '2016-04-01'
and a.DateIntervention < '2016-05-01'
我从 2016 Jan 04 00:00:00.000
获得结果,因此它正在读取我的日期为 ydm,尽管结果显示日期格式为 ymd (2016-01-04 00:00:00.000)
当我向系统询问日期格式时,它告诉我是 dmy (!)
如何更改此设置以便我可以像 ymd 一样编写查询并继续像 ymd 一样获取结果?
在SQL服务器中,您不需要。如果删除连字符,则将使用 YYYYMMDD:
解释字符串
where a.DateIntervention >= '20160401' and a.DateIntervention < '20160501'
我更喜欢连字符,因为它们更具可读性,被大多数数据库接受,并且通常在 SQL 服务器中工作。在某些特定设置中它们不起作用,但 'YYYYMMDD'
始终被解释为日期。
我要补充一点,如果你愿意,你 可以 投入 cast()
/convert()
:
where a.DateIntervention >= cast('20160401' as date) and
a.DateIntervention < cast('20160501' as date)
查询没有内置方式实现"I was supplied a YMD date, I should output dates as YMD too."。
理论上你可以调用 SET DATEFORMAT ymd
,但我不喜欢这样,因为它可能会影响你不知道的更远的地方。
如果在转换过程中想要显式 formatting/parsing 样式(这几乎总是一个好主意),则需要显式转换它,并且 supply the style:
-- 126 is hyphenated, but has extra parts if something other than date is used
CONVERT(DATE, '2017-07-28', 126)
当然,最好的选择是将参数作为实际的 DATE
类型提供,并以相同的方式获得输出,这样可以避免来回转换为字符串类型,并避免格式化问题。但是,这在某些情况下可能不可用(例如临时查询)。
我写了一个 SQL 查询以获得从 2016 年 4 月 1 日到 2016 年 5 月 1 日的结果。 当我写道:
where a.DateIntervention >= '2016-04-01'
and a.DateIntervention < '2016-05-01'
我从 2016 Jan 04 00:00:00.000
获得结果,因此它正在读取我的日期为 ydm,尽管结果显示日期格式为 ymd (2016-01-04 00:00:00.000)
当我向系统询问日期格式时,它告诉我是 dmy (!)
如何更改此设置以便我可以像 ymd 一样编写查询并继续像 ymd 一样获取结果?
在SQL服务器中,您不需要。如果删除连字符,则将使用 YYYYMMDD:
解释字符串where a.DateIntervention >= '20160401' and a.DateIntervention < '20160501'
我更喜欢连字符,因为它们更具可读性,被大多数数据库接受,并且通常在 SQL 服务器中工作。在某些特定设置中它们不起作用,但 'YYYYMMDD'
始终被解释为日期。
我要补充一点,如果你愿意,你 可以 投入 cast()
/convert()
:
where a.DateIntervention >= cast('20160401' as date) and
a.DateIntervention < cast('20160501' as date)
查询没有内置方式实现"I was supplied a YMD date, I should output dates as YMD too."。
理论上你可以调用 SET DATEFORMAT ymd
,但我不喜欢这样,因为它可能会影响你不知道的更远的地方。
如果在转换过程中想要显式 formatting/parsing 样式(这几乎总是一个好主意),则需要显式转换它,并且 supply the style:
-- 126 is hyphenated, but has extra parts if something other than date is used
CONVERT(DATE, '2017-07-28', 126)
当然,最好的选择是将参数作为实际的 DATE
类型提供,并以相同的方式获得输出,这样可以避免来回转换为字符串类型,并避免格式化问题。但是,这在某些情况下可能不可用(例如临时查询)。