where 子句中的日期返回 0 行

Date in where clause returning 0 rows

我正在尝试获取如下数据 WHERE DateCommande = '2018-09-05' 但它在我的电脑上不起作用。

SELECT * 
  FROM dbo.Commande;

Returns 行,包括在 datetime 列中将 2018-09-05 显示为日期时间值的行。

但是,在我计算机上的 SSMS 上,如果我添加一个 WHERE 子句,查询 returns 0 行:

SELECT *
  FROM dbo.Commande
  WHERE DateTimeColumn = '2018-09-05 00:00:00.000';

yyyy-mm-dd hh:mm:ss.000 不是 语言和区域 settings-safe 格式!

SELECT CONVERT(datetime, '2021-09-07');
SET LANGUAGE Nederlands;
SELECT CONVERT(datetime, '2021-09-07');

结果(db<>fiddle):

-----------------------
2021-09-07 00:00:00.000

-----------------------
2021-07-09 00:00:00.000

请使用 yyyy-mm-ddThh:mm:ss.000 - T 非常重要。所以:

WHERE DateCommande = '2018-09-05T00:00:00.000';

或者在您的情况下,可能只是更接近您问题中的内容,而不是屏幕截图中的内容:

WHERE DateCommande = '20180905'; -- YYYYMMDD *not* YYYY-MM-DD

但是除非您只想要那些没有时间的行,或者确定永远不会有与日期关联的时间(在这种情况下,为什么数据类型不是 date?),否则两者都不会这些查询将是安全的。最好说:

WHERE DateCommande >= '20180905'
  AND DateCommande <  '20180906';

有关更多背景信息,请参阅此处标题为 Regional formats 的部分中的链接:

解决!感谢@Aaron Bertrand!

SET LANGUAGE us_english;
SELECT  *
FROM BdCommerciale2.dbo.Commande
WHERE DateCommande = '2018-09-05';