CASE语句-将数据类型nvarchar转换为数值时出错

时间:2018-07-31 05:21:40

标签: sql-server tsql date case

我需要在case语句中将日期转换为字符串,如下所示,但出现错误

  

将数据类型nvarchar转换为数字时出错

CASE
  WHEN Code='X' and Category=1 THEN X_Col
  WHEN Code='Y' THEN Y_Col
  WHEN Code='Z' THEN CAST(Z_Col AS nvarchar(20))
END AS Res

我知道是否可以进行以下操作,但在某些情况下我需要检查两列

CASE Code
 WHEN 'X' THEN X_Col
 WHEN 'Y' THEN Y_Col
 WHEN 'Z' THEN CAST(Z_Col AS nvarchar(20))
END AS Res

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您能尝试一下吗?

CASE
  WHEN Code='X' and Category=1 THEN CAST(X_Col nvarchar(20))
  WHEN Code='Y' THEN CAST(Y_Col nvarchar(20))
  WHEN Code='Z' THEN CAST(Z_Col AS nvarchar(20))
END AS Res

表达式的返回类型是result_expressions和可选的else_result_expression中的类型集中的最高优先级类型。

Here,您可以看到数据类型优先级。因此,我想您的值之一是数字/整数,并且转换失败。

答案 1 :(得分:1)

问题不是因为在一种情况下使用2个条件,而是因为3种情况的数据类型可能有所不同。

最终情况将产生1列。因此,then语句应仅具有1个数据类型。

将案件更改为

CASE
  WHEN Code='X' and Category=1 THEN CAST(X_Col AS nvarchar(20))
  WHEN Code='Y' THEN CAST(Y_Col AS nvarchar(20))
  WHEN Code='Z' THEN CAST(Z_Col AS nvarchar(20))
END AS Res