我有以下代码:
,iif(([CreatedDateTime] IS NOT NULL
AND
migrationdatetime IS NOT NULL), datediff(day,[CreatedDateTime],[MigrationDateTime]),'not moved to prd')
,基本上,如果这些日期中的任何一个为空,我都想显示一个文本。 是否有任何原因导致我收到此错误“将varchar值“ something”转换为数据类型int时转换失败” 我该如何解决? 感谢您的帮助
答案 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中的日期格式不正确。您需要查看记录