Tsql T-sql:案例显示日期或将日期转换为nvarchar

Tsql T-sql:案例显示日期或将日期转换为nvarchar,tsql,type-conversion,Tsql,Type Conversion,我想使用case语句,其中我的逻辑确定日期。如果返回的值是空值,我希望显示“none”而不是空值 请参阅下面的代码 CASE WHEN DATEDIFF(d, vso.pod_ata, ISNULL(cncr.cntr_date3, GETUTCDATE())) - 14 > 0 THEN vso.pod_ata + 14 ELSE CONVERT(NVARCHAR(10), 'none') END AS 'start_dem', SQL SERVER抱怨转换问题,所以我尝试将其转换为n

我想使用case语句,其中我的逻辑确定日期。如果返回的值是空值,我希望显示“none”而不是空值

请参阅下面的代码

CASE WHEN DATEDIFF(d, vso.pod_ata, ISNULL(cncr.cntr_date3, GETUTCDATE())) - 14 > 0 THEN vso.pod_ata + 14
ELSE CONVERT(NVARCHAR(10), 'none')
END AS 'start_dem',

SQL SERVER抱怨转换问题,所以我尝试将其转换为nvarchar,但这不起作用。有人知道解决这个问题的好方法吗?

您应该转换日期,而不是字符串

CASE WHEN DATEDIFF(d, vso.pod_ata, ISNULL(cncr.cntr_date3, GETUTCDATE())) > 14 THEN convert(VARCHAR(10), dateadd(day, 14, vso.pod_ata), 120)  
ELSE 'none'
END AS 'start_dem',

您应该转换日期,而不是字符串

CASE WHEN DATEDIFF(d, vso.pod_ata, ISNULL(cncr.cntr_date3, GETUTCDATE())) > 14 THEN convert(VARCHAR(10), dateadd(day, 14, vso.pod_ata), 120)  
ELSE 'none'
END AS 'start_dem',

据我所知,SQL不允许在同一列中混合数据类型。将
vso.pod_ata+14
转换为
NVARCHAR

CASE WHEN DATEDIFF(d, vso.pod_ata, ISNULL(cncr.cntr_date3, GETUTCDATE())) - 14 > 0 THEN CONVERT(NVARCHAR(50), vso.pod_ata + 14)
ELSE CONVERT(NVARCHAR(50), 'none')
END AS 'start_dem',

据我所知,SQL不允许在同一列中混合数据类型。将
vso.pod_ata+14
转换为
NVARCHAR

CASE WHEN DATEDIFF(d, vso.pod_ata, ISNULL(cncr.cntr_date3, GETUTCDATE())) - 14 > 0 THEN CONVERT(NVARCHAR(50), vso.pod_ata + 14)
ELSE CONVERT(NVARCHAR(50), 'none')
END AS 'start_dem',

这是可行的,但当我这样做时,我会丢失日期格式。我想要它,所以日期是yyyy-mm-dd。@nickgowdy:那就适合你了,如果有必要的话。我将这标记为正确答案,因为我使用了此代码并添加了@AndriyM comment中的日期格式代码。谢谢大家!!这是可行的,但当我这样做时,我会丢失日期格式。我想要它,所以日期是yyyy-mm-dd。@nickgowdy:那就适合你了,如果有必要的话。我将这标记为正确答案,因为我使用了此代码并添加了@AndriyM comment中的日期格式代码。谢谢大家!!由于我们的答案非常相似,我将我的答案更改为你的答案,以给OP他要求的格式。然后我删除了我自己的答案,并对你的答案进行了升级。由于我们的答案非常相似,我将我的答案中的更改应用于你的答案,以使OP符合他要求的格式。然后我删除了我自己的答案,并对你的答案投了更高的票。