Sql server 使用DateTime参数生成SQL查询

Sql server 使用DateTime参数生成SQL查询,sql-server,datetime,Sql Server,Datetime,我可以成功地使用带有字符串格式的日期参数的查询 SELECT * FROM ORDERS WHERE [DATE]='20160209' 但我还没有看到任何以字符串格式指定DateTime参数的查询示例。 以下示例被Microsoft SQL Server Management Studio拒绝: SELECT * FROM ORDERS WHERE [DATE]='20130523T153500000Z' SELECT * FROM ORDERS WHERE [DATE]='2013-05-

我可以成功地使用带有字符串格式的日期参数的查询

SELECT * FROM ORDERS WHERE [DATE]='20160209'
但我还没有看到任何以字符串格式指定DateTime参数的查询示例。 以下示例被Microsoft SQL Server Management Studio拒绝:

SELECT * FROM ORDERS WHERE [DATE]='20130523T153500000Z'
SELECT * FROM ORDERS WHERE [DATE]='2013-05-23T15:35:00:000Z'
我知道这不是一个好的实践,我应该传递DateTime值而不是字符串,但有时它对调试很有用


在SQL查询中包含字符串格式的datetime的正确格式是什么?

您可以这样做吗

SELECT *
FROM ORDERS
WHERE [DATE] = CONVERT(DATETIME,'20130523T153500000Z')

只要字符串的格式可行。

如果只是为了调试,您可以执行以下操作:

DECLARE @val VARCHAR(25)

-- Easily swapped out with different testing values
SET @val = '20130523T153500000Z'

SELECT * 
FROM Orders
WHERE [DATE] = CAST(@val AS DATETIME)
-- You could also use CONVERT 

不,所以我确定你在哪里找到了这些日期格式。。。 这个“2013-05-23T15:35:00:000Z”看起来不太对。我还没有看到纳秒是由“:”字符分隔的。它通常是一秒的小数点,因此“2013-05-23T15:35:00.000Z”是一种更好的格式,它可以工作:

select convert(DateTime,'2013-05-23T15:35:00.000Z')
至于另一个,您可能需要自己进行解析:

select CONVERT(DATETIME,LEFT('20130523T153500000Z',4)+SUBSTRING('20130523T153500000Z',5,2)+SUBSTRING('20130523T153500000Z',7,2))
希望这有帮助