Concat 在 case 语句中不起作用
Posted
技术标签:
【中文标题】Concat 在 case 语句中不起作用【英文标题】:Concat in not working inside case statement 【发布时间】:2021-11-02 16:50:00 【问题描述】:我有一个月份列,其值从 1、2、3 到 12。我在下面写查询以将 1 位的列值转换为 2 位,即 1 和 2 之类的值将转换为 01 和 02,但是这种连接不起作用,月份仍然是个位数。
主要查询:
select
case
when len(month) = 1
then concat(0, month)
else month
end as month_new,
month
from
Table
但是当我按照下面的方式单独尝试查询时,连接有效,它将个位数月份转换为 2 位数
查询 1
select top 10 concat(0, month), month
from table
仅查询 1 有效
查询 2
select
case
when len(month) = 1
then 1
else 0
end,
month
from
Table
单独的查询 2 正在工作,这意味着检查月份列中的长度按预期工作。但是当 concat 在 case 内使用时,它就不起作用了。
我已经修改了如下查询并为我工作
select
case
when len(month) = 1
then concat(0, month)
else cast(month as varchar)
end as month_new,
month
from
table
【问题讨论】:
仅供参考case
是一个表达式而不是一个语句。
请提供示例数据、预期结果并解释“不工作”的含义。
你似乎混淆了你的字符串和整数。问题是您的 case
表达式。请参考 documentation Return Types
部分的 CASE
表达式。还有Data type precedence
【参考方案1】:
不知道您使用的是什么数据库,并且由于您没有提供任何示例数据,我只能假设您的 CASE
不是问题,但如果您想这样做,这意味着您的数据类型是字符串和您尝试在查询中使用整数 CONCAT
字符串。
也许您可以尝试将“引号”添加到您的零字符串和CAST
作为字符串的结果。
【讨论】:
【参考方案2】:问题是month
是一个整数,而concat()
的结果是一个字符串。所以。 case
正在尝试将字符串转换回整数。您可以使用cast
将整数强制转换为字符串,但有更好的方法来做到这一点。
相反,只需使用FORMAT
函数:
select
format(month, '00') as month_new
, month
from viivscaazure.F_SALES_DETAIL
【讨论】:
以上是关于Concat 在 case 语句中不起作用的主要内容,如果未能解决你的问题,请参考以下文章