PROD上的日期转换失败,在DEV中正常工作

时间:2017-04-05 18:32:42

标签: sql-server

我有一份停止在生产中工作的报告,它在几周前工作正常。它在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。对这是什么造成的任何想法?

3 个答案:

答案 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中输入! 感谢所有的提示和建议。