查询中的日期格式与结果

时间:2017-07-28 20:28:35

标签: sql sql-server date-format

我写了一个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之类的结果?

2 个答案:

答案 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类型提供,并以相同的方式获得输出,这样可以避免来回转换为字符串类型,并避免格式化问题。但是,这可能在某些情况下不可用(如临时查询)。