我有一份停止在生产中工作的报告,它在几周前工作正常。它在dev中运行良好,代码相同。这两种环境都是SQL Server 2012。
select SUM(oi.quantity_shipped) as [Quantity Shipped],
oi.itemDescription as [Item Description],
oi.itemLanguage
from order_items as oi
inner join orderX as x on oi.ID = x.id
where convert(date, x.shipDate) between '1/1/2016' and '1/1/2017'
group by oi.itemDescription,
oi.itemLanguage
order by [Item Description]
prod代码返回错误:
Msg 241,Level 16,State 1,Line 2 从字符串转换日期和/或时间时转换失败。
请注意,x.shipDate可以为null。对这是什么造成的任何想法?
答案 0 :(得分:1)
即使您发现了导致错误的错误数据,还需要记住以下其他一些事项:
我想你可能会误解between
;除非您明确要包括2017年1月1日的全部内容。此外,请使用'YYYYMMDD'
字符串格式作为日期。
使用其他API或Transact-SQL脚本,存储过程和触发器的应用程序应使用未分隔的数字字符串。例如,yyyymmdd为19980924. - Write International Transact-SQL Statements - msdn
select SUM(oi.quantity_shipped) as [Quantity Shipped],
oi.itemDescription as [Item Description],
oi.itemLanguage
from order_items as oi
inner join orderX as x on oi.ID = x.id
where convert(date, x.shipDate,120) >= '20160101'
and convert(date, x.shipDate,120) < '20170101'
group by oi.itemDescription,
oi.itemLanguage
order by [Item Description]
参考:
答案 1 :(得分:0)
看起来您在日期字段中有一些不良数据,您可以使用try_convert保留这些转换错误,如下所示:
select SUM(oi.quantity_shipped) as [Quantity Shipped],
oi.itemDescription as [Item Description],
oi.itemLanguage
from order_items as oi
inner join orderX as x on oi.ID = x.id
where try_convert(date, x.shipDate) between '1/1/2016' and '1/1/2017'
group by oi.itemDescription,
oi.itemLanguage
order by [Item Description]
答案 2 :(得分:-1)
找到它 - !数据错误,我的外部系统在shipDate中输入! 感谢所有的提示和建议。