如果我运行这个查询。
select startdate, count(*)
from tablename
where startdate > '2020-04-06'
它只返回起始日期在2020年6月4日之后的值。然而表中的日期是以YYYY-MM-DD HH:MM:SSS.SSS的格式。
如果我运行getdate()或sysdatetime(),它会以正确的格式返回2020-06-16 14:29:29.157。
那么为什么查询使用YYYY-DD-MM?我怎样才能让它变成默认的格式?
P.S.我知道我可以在查询中使用CONVERT或者FORMAT,但是由于所有的日期都是YYYY-MM-DD格式,我希望它是默认的,而不是每次都要写额外的代码。
EDIT: 我使用的是Microsoft SQL Server Management Studio。
EDIT2:我和同事检查了一下,同样的事情发生在他们身上。
这取决于各种设置。 你可以通过删除连字符来解决这个问题。
startdate > '20200406'
在SQL Server中,这种格式总是毫不含糊,YYYYMMDD。 我更喜欢带连字符的版本,因为它更标准。 但如果你是作为一个问题来处理,我建议使用SQL Server的不含糊格式。
你可以用两种方式来处理它。
在会话层面,你可以设置格式,并发出查询指令
使用ISO 8601格式(推荐)。
DECLARE @table table(a datetime)
INSERT INTO @table values('2020-04-06')
SELECT * FROM @table WHERE A = '2020-04-06' -- ISO 8601
set dateformat ymd
SELECT * FROM @table WHERE A = '2020-04-06' -- Format change