在SqlServer中格式化日期以用作比较

时间:2010-02-09 11:07:23

标签: sql sql-server

这应该很容易

我在表A上有一个日期栏

SELECT * FROM TABLEA DTE = '01 / 02/2010'

问题是这部署在美国服务器上,我无法控制日期作为其arg。

如何告诉SqlServer将此日期视为该格式?

我试过这个:

SELECT * 从TABLEA 在哪里DTE = CONVERT(VARCHAR(10),'01/01/2010',101)AS [DD / MM / YYYY]

4 个答案:

答案 0 :(得分:1)

使用安全格式。对于日期(没有时间组件),安全格式为YYYYMMDD,例如今天是'20100209'。

对于日期时间,安全格式为YYYY-MM-DD'T'HH:mm:SS,其中'T'是文字T,所以现在是'2010-02-09T11:10:3​​0'。< / p>

(当我说安全时,我的意思是SQL Server总是明确地知道如何将这些字符串转换为日期时间值)

答案 1 :(得分:1)

查看此参考文章:The ultimate guide to the datetime datatypes

编辑:特别是Tibor关于SET DATEFORMAT&amp; amp; SET LANGUAGE,因为你提到你无法控制输入格式。

答案 2 :(得分:1)

你的最后一次尝试几乎是正确的,但应该是

SELECT * FROM TABLEA WHERE AS_OF_DATE = CONVERT(DATETIME, '01/01/2010', 101)

答案 3 :(得分:0)

另一种选择是双重转换(用作标准时检查性能):

select strTempNo, dtmTempDateStart,
    convert(varchar(10), Convert(datetime, dtmTempDateStart, 103), 126) As UTCDate

我在这里使用103,因为数据已经是UTC格式,但这也适用(UTC ISO8601是126)。 如果您的日期始终采用美国格式,则必须使用101。

或者使用112(ISO“安全”格式)并从字符串中删除前8个字符。

数据样本:(抱歉,没有可用的美国日期表)

  • 521002 2008-09-1500:00:00.000 2008-09-15
  • 580195 2008-04-1500:00:00.000 2008-04-15
  • 530058 2008-09-2200:00:00.000 2008-09-22
  • 580194 2008-04-0200:00:00.000 2008-04-02
  • 500897 2008-07-0100:00:00.000 2008-07-01
  • 500966 2008-09-2300:00:00.000 2008-09-23
相关问题