-1
SELECT AcquistionDate = CONVERT(NVARCHAR,
                        CASE 
                           WHEN D.CalendarDate NOT IN ('01/01/1900','12/31/9999') 
                              THEN D.CalendarDate 
                           WHEN ac.FirstAccountOpenDate NOT IN ('01/01/1900', '12/31/9999')  
                              THEN ac.FirstAccountOpenDate 
                        END, 126) + 'Z 
from TABLE;

我收到一个错误

消息 8114,级别 16,状态 5,第 1 行将
数据类型 varchar 转换为 bigint 时出错

4

1 回答 1

0

CONVERT(NVARCHAR....)需要一个日期并将其转换为格式为 126 的 NVARCHAR或yyyy-mm-ddThh:mi:ss.mmm

但是你有+'Z from table我会假设这是一个复制粘贴错误,并且单引号不应该在那里,实际上+ Z from Table 在这种情况下我会假设Z是一个bigint. 这意味着您正在尝试将 a 添加NVARCHAR到 a BIGINT,这意味着NVARCHAR首先尝试将其转换为BIGINTwhich 将失败,因为它是日期的字符串表示形式而不是数字。

另一个可能不了解您的代码或数据库结构的更多信息是CASE表达式中的一个日期字段实际上是 aBIGINT并且当您将其与字符串的日期表示进行比较时,对话在那里失败。

但我确实同意 Chris Berger 的评论,即这看起来应该写得非常不同。

于 2017-05-23T20:40:12.450 回答