将varchar值“ something”转换为数据类型int时转换失败

时间:2019-09-27 17:32:52

标签: sql sql-server

我有以下代码:

,iif(([CreatedDateTime] IS NOT NULL 
AND 
migrationdatetime IS NOT NULL), datediff(day,[CreatedDateTime],[MigrationDateTime]),'not moved to prd') 

,基本上,如果这些日期中的任何一个为空,我都想显示一个文本。 是否有任何原因导致我收到此错误“将varchar值“ something”转换为数据类型int时转换失败”  我该如何解决? 感谢您的帮助

2 个答案:

答案 0 :(得分:3)

一个表达式就是一个表达式就是一个表达式。而且-就像许多玫瑰的颜色一样-只有一种类型。它不能同时是字符串和日期。

根据 SQL 的类型优先规则,当选择字符串和数字时,数字是主要类型;因此字符串将转换为数字。然后您会收到转换错误。

因此,请使用CONVERT()CAST()FORMAT()

(CASE WHEN CreatedDateTime IS NOT NULL AND migrationdatetime IS NOT NULL
      THEN CONVERT(VARCHAR(255), DATEDIFF(DAY, CreatedDateTime, MigrationDateTime))
      ELSE 'not moved to prd'
 END)

当然,考虑到SQL中NULL的规则,这可以更简单地写为:

      COALESCE(CONVERT(VARCHAR(255), DATEDIFF(DAY, CreatedDateTime, MigrationDateTime)),
               'not moved to prd'
              )

答案 1 :(得分:0)

我使用了相同的方法,但是效果很好

DECLARE @CreatedDateTime Varchar(30) = getdate(), @migrationdatetime  Varchar(30) = dateAdd(MM,2,getdate())

Select iif((@CreatedDateTime IS NOT NULL AND @migrationdatetime IS NOT NULL), datediff(day,@CreatedDateTime,@MigrationDateTime),'not moved to prd') 

我认为varchar中的日期格式不正确。您需要查看记录