如何在SQL中将datetime2(7)类型转换为字符串?
解决datetime2(7)转字符串时CASE语句的类型冲突问题
问题出在CASE表达式的所有分支必须返回兼容的数据类型。你的语句中,number_val(数值类型)、toggle_val(通常是BIT类型)等分支的返回类型,和TRY_CONVERT(varchar,[date_val],0)的字符串类型不匹配,导致SQL无法自动统一类型,触发报错。
解决方案:统一所有分支的返回类型为字符串
将每个分支的结果都转换为varchar类型,确保类型一致:
CASE WHEN [value_name] = 'array_val' THEN CAST([array_val] AS varchar(MAX)) WHEN [value_name] = 'choice_val' THEN [choice_val] WHEN [value_name] = 'date_val' THEN TRY_CONVERT(varchar(30), [date_val], 120) WHEN [value_name] = 'number_val' THEN TRY_CONVERT(varchar(50), [number_val]) WHEN [value_name] = 'text_val' THEN [text_val] WHEN [value_name] = 'toggle_val' THEN CASE WHEN [toggle_val] = 1 THEN '是' ELSE '否' END WHEN [value_name] = 'svg_val' AND [svg_val] IS NOT NULL THEN 'Signed by ' + CAST([name] AS varchar(100)) ELSE NULL END AS Answers
关键细节说明
- 给
varchar指定明确长度:避免默认长度(部分场景下默认1)导致的内容截断,根据实际数据长度调整(比如varchar(30)足够容纳datetime2的完整字符串)。 - 用
TRY_CONVERT替代强制转换:转换失败时返回NULL,不会导致整个查询中断。 - BIT类型处理:
toggle_val如果是BIT类型,直接转字符串会得到'1'/'0',可以用嵌套CASE转成更易读的文本(如'是'/'否')。 - 复杂类型处理:如果
array_val是JSON或其他复杂类型,需用对应函数(如JSON_QUERY)转换为字符串格式。
内容的提问来源于stack exchange,提问作者Swati Vishwanathan
相关产品推荐
相关产品推荐

