我写了一个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之类的结果?
答案 0 :(得分:2)
在SQL Server中,您不需要。如果删除连字符,则将使用YYYYMMDD解释字符串:
where a.DateIntervention >= '20160401' and a.DateIntervention < '20160501'
我更喜欢连字符,因为它们更具可读性,在大多数数据库中都被接受,并且通常在SQL Server中工作。有些特殊设置不起作用,但'YYYYMMDD'
始终被解释为日期。
如果您愿意,我应该添加可以投入cast()
/ convert()
:
where a.DateIntervention >= cast('20160401' as date) and
a.DateIntervention < cast('20160501' as date)
答案 1 :(得分:0)
查询没有内置的方式来实现&#34;我提供了YMD日期,我也应该将日期输出为YMD。&#34;。
从理论上讲,你可以打电话给SET DATEFORMAT ymd
,但我不喜欢这样,因为它可能会影响到你不了解的更深层次的东西。
如果你想在转换过程中使用明确的格式化/解析风格(这几乎总是一个好主意),你需要显式转换它,supply the style:
-- 126 is hyphenated, but has extra parts if something other than date is used
CONVERT(DATE, '2017-07-28', 126)
当然,最好的选择是将参数作为实际的DATE
类型提供,并以相同的方式获得输出,这样可以避免来回转换为字符串类型,并避免格式化问题。但是,这可能在某些情况下不可用(如临时查询)。