【问题标题】:Add leading 0 to a conditional VARCHAR column将前导 0 添加到条件 VARCHAR 列
【发布时间】:2021-11-23 09:22:15
【问题描述】:

我有一个字符串列,我想根据特定条件在其中添加前导零。 所有列都是 Varchar 并且需要保持原样以进行连接等。

示例表:

Category ID
A 0516E24
A 51733F
A F383036
B 5290W
C 058Z2
C S36.98

我本质上是想在任何以字符“5”开头的代码中添加前导“0”。 我不想将前导零添加到不以“5”开头的任何其他值,例如上面看到的 F383036S36.98 值。

我尝试了 CASE WHEN 语句,但出现错误(错误:无法将“”转换为 float8)

我的代码:

SELECT CASE WHEN CODE LIKE '5%' THEN '0' ELSE '' END + CODE AS CODE
FROM table

我正在寻找更新后的表格,如下所示,我将更正后的值加粗。

Category ID
A 0516E24
A 051733F
A F383036
B 05290W
C 058Z2
C S36.98

感谢您的帮助,我完全迷路了。谢谢!

【问题讨论】:

  • 您能否更新您的问题以包含您尝试过的 SQL CASE 语句?
  • 向我们展示你的case 表达尝试!
  • 顺便说一句,您使用的是哪个 dbms?
  • @jarlh 我正在使用 Vertica

标签: sql varchar vertica leading-zero


【解决方案1】:

这是 Vertica。 Vertica 与 ANSI 兼容,并且与 Access 和 SQL Server 不同,它使用双杠 || 进行连接。将您的代码更改为:

SELECT 
  CASE WHEN LEFT(CODE,1)= '5' 
    THEN '0' 
    ELSE '' 
  END || CODE AS CODE
FROM table 

'Could not convert "" to float8' 有点误导性的消息是因为您在尝试中使用的 + 运算符需要数字文字出现在它的左侧和右侧。 Vertica 正在尝试在尝试加法操作之前将字符串隐式重新转换为浮动。

【讨论】:

  • 请稍等或发表评论。 || 是 ANSI SQL,但不是 LEFT()。
【解决方案2】:
SELECT CASE WHEN CODE LIKE '5%' THEN CONCAT('0', CODE) ELSE CODE END AS CODE
FROM table

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多