从SQL语句中的字段中删除前导零

Tim*_*m C 93 sql t-sql sql-server

我正在研究从SQLServer数据库读取以生成提取文件的SQL查询.从特定字段中删除前导零的要求之一,这是一个简单的VARCHAR(10)字段.因此,例如,如果字段包含'00001A',则SELECT语句需要将数据返回为'1A'.

SQL中有没有办法以这种方式轻松删除前导零?我知道有一个RTRIM功能,但这似乎只是删除空格.

Ian*_*ill 144

select substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
Run Code Online (Sandbox Code Playgroud)

  • 当字符串完全由"0"组成时,这将有问题,因为它永远不会匹配非"0"字符. (7认同)
  • 在使用此解决方案之前,请尝试查看 Arvo 的回答 [在这里发布](/sf/ask/46366841/) (2认同)

小智 24

select replace(ltrim(replace(ColumnName,'0',' ')),' ','0')
Run Code Online (Sandbox Code Playgroud)

  • 如果值中有空格,则会失败.示例:"0001 B"应变为"1 B",但将变为"10B". (4认同)
  • 就像@Omaer提到的,如果字符串中有一些空格,这是不安全的。改进的解决方案 - 首先将空格替换为不太可能进入输入的字符,然后在 0-ltrim 之后将这些字符恢复为空格。最后看起来相当复杂:( 示例: select replacement(replace(ltrim(replace(replace('000309933200,00 USD', ' ', '|'),'0',' ')),' ','0 '), '|', ' ') --> 309933200,00 美元 (3认同)

小智 10

你可以使用这个:

SELECT REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '0')
Run Code Online (Sandbox Code Playgroud)


小智 5

select substring(substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20), 
    patindex('%[^0]%',substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 
    20)), 20)
Run Code Online (Sandbox Code Playgroud)

Returns N0Z,也就是说,将摆脱前导零和它们之前的任何东西。

  • 如果有东西在它之前,它是如何领先的 0? (7认同)

小智 5

我有同样的需求并使用了这个:

select 
    case 
        when left(column,1) = '0' 
        then right(column, (len(column)-1)) 
        else column 
      end
Run Code Online (Sandbox Code Playgroud)

  • 仅适用于单个零,海报要求复数零 (2认同)