我查看了其他答案。出于某种原因,他们似乎没有解决我的问题。这是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数据类型转换为日期时间数据类型会导致超出范围的值。
答案 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)