日期时间varchar转换

时间:2017-11-03 14:21:45

标签: tsql datetime

我查看了其他答案。出于某种原因,他们似乎没有解决我的问题。这是sql代码:

SELECT *
FROM invoices
WHERE InvoiceDate BETWEEN CONVERT(datetime,'2012-00-00',120) AND CONVERT(datetime,'2013-00-00',120  )
ORDER BY InvoiceDate DESC

我一直收到以下错误消息: 将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

3 个答案:

答案 0 :(得分:2)

SELECT *
FROM invoices
WHERE InvoiceDate >= '2012-01-01' AND InvoiceDate < '2013-01-01'
ORDER BY InvoiceDate DESC

答案 1 :(得分:0)

您有以下内容:CONVERT(datetime,'2012-00-00',120)。您不能创建没有日期或月份的日期。

答案 2 :(得分:0)

使用命名参数:

DECLARE @year INT;
SET @year = 2012;
SELECT *
FROM invoices
WHERE InvoiceDate >= DateFromParts(@year,1,1) AND InvoiceDate < DateFromParts(@year+1,1,1)
ORDER BY InvoiceDate DESC;

如果DateFromParts不可用(2012年之前的MSSQL),可以像这样创建日期

WHERE InvoiceDate >= DateAdd(Year,@year-1900,0) AND InvoiceDate < DateAdd(Year,@year-1899,0)