【问题标题】:Absolutely simple SQL Server query doesn't return anything绝对简单的 SQL Server 查询不返回任何内容
【发布时间】:2013-03-10 19:58:18
【问题描述】:

这里的东西对我来说很奇怪......

Select BARCODE, DATA 
from HISTORIA 
WHERE BARCODE='25405187' AND DATA = '2013-03-08 00:00:00.000'

Select BARCODE, DATA 
from HISTORIA 
WHERE BARCODE='25405187'

简单吧?

现在请看返回的数据:

Ekhmmm...为什么...为什么...WHYYYY? :) 如您所见,有合适的日期,但比较会扼杀结果。

我有 SQL Server 2005 Express 和 Management Studio Express

【问题讨论】:

  • SELECT #2013-03-08 00:00:00.000# 返回什么?我怀疑 SQL 读取数据的方式与其显示的不同,特别是在字符串中的月/日位置方面。
  • DATA有什么数据类型?
  • 当您使用'2013-Mar-08 00:00:00.000'(或等效的短月份名称)时会发生什么?
  • 嗨。谢谢快速回答。使用这个:2013-Mar-08 00:00:00.000 返回错误 -> Msg 10054, Level 20, State 0, Line 0 向服务器发送请求时发生传输级错误。 (提供者:TCP Provider,错误:0 - 现有连接被远程主机强行关闭。)
  • SELECT #2013-03-08 00:00:00.000# -> 返回错误 -> Msg 102, Level 15, State 1, Line 1 '00'附近的语法错误。

标签: sql-server date sql-server-2005-express


【解决方案1】:

'2013-03-08 00:00:00.000' 在转换为 datetime 时是 not an unambiguous format。它可以表示 8 月 3 日或 3 月 8 日。

这取决于您的DATEFORMAT 设置(这又取决于您的登录语言)。

SET LANGUAGE english

SELECT CAST('2013-03-08 00:00:00.000' AS DATETIME) AS english

SET LANGUAGE british

SELECT CAST('2013-03-08 00:00:00.000' AS DATETIME) AS british

返回

Changed language setting to us_english.
english
-----------------------
2013-03-08 00:00:00.000

Changed language setting to British.
british
-----------------------
2013-08-03 00:00:00.000

使用

WHERE BARCODE='25405187' AND DATA = '20130308 00:00:00.000' 

或者更简单

WHERE BARCODE='25405187' AND DATA = '20130308' 

【讨论】:

    【解决方案2】:

    试试这个标准 (ISO) 日期表示:

    Select BARCODE, DATA 
    from HISTORIA 
    WHERE BARCODE='25405187' AND DATA = '2013-03-08T00:00:00.000'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 2012-07-17
      • 1970-01-01
      • 2020-09-25
      • 2012-04-14
      相关资源
      最近更新 更多