0

我正在尝试按如下方式获取数据, WHERE DateCommande = '2018-09-05' 但它在我的计算机上不起作用。

SELECT * 
  FROM dbo.Commande;

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

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

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

2 回答 2

7

yyyy-mm-dd hh:mm:ss.000不是一种语言和区域设置安全格式!

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有关更多背景信息,请参阅此处标题为部分的链接:

于 2021-09-23T00:31:45.910 回答
-2

解决这个问题!感谢@Aaron Bertrand!

SET LANGUAGE us_english;
SELECT  *
FROM BdCommerciale2.dbo.Commande
WHERE DateCommande = '2018-09-05';
于 2021-09-23T01:03:10.250 回答