从 SQL 中删除两组前导零

Posted

技术标签:

【中文标题】从 SQL 中删除两组前导零【英文标题】:Remove two sets of leading zeros from SQL 【发布时间】:2014-05-06 17:30:06 【问题描述】:

我有一组看起来像这样的数据;

DOCUMENT_ID
===
019239.03491
019239.03497
019239.03498
019239.03500
019239.03501
019239.03503
019239.03514
019239.03521
019168.00845
019168.00846
019168.00847
019168.00848
019168.00850
019168.00860
019168.00861
019168.00866
019168.00867
019168.00868
019168.00869
019168.00870

我需要删除字段最左侧的前导零以及小数点后的前导零。请注意,前导零可能不止一个。换句话说,我需要上面的数据看起来像下面的数据;

 Doc_Number
17516.1178
17517.2083
17517.2630
17517.2972
17517.3365
17519.4004
17520.3395
17520.3461
17520.3695
17520.3918
17520.4378
17520.582

任何信息或帮助都会有所帮助。我正在使用 MS SQL SERVER 2012。

【问题讨论】:

你自己尝试过什么吗? @outisnihil TSQL 中没有默认的拆分函数 I need to remove leading zeros after a decimal point 的可能重复项 @JohnHartsock - 感谢您的纠正,大脑语言有误。 【参考方案1】:

双重施法做得很好。

创建表文档(文档 ID VARCHAR(13)); 插入文档(DOCUMENT_ID)值('019239.03491'); 插入文档(DOCUMENT_ID)值('019239.03497'); 插入文档(DOCUMENT_ID)值('019239.03498'); 插入文档(DOCUMENT_ID)值('019239.03500'); 插入文档(DOCUMENT_ID)值('019239.03501'); 插入文档(DOCUMENT_ID)值('019239.03503'); 插入文档(DOCUMENT_ID)值('019239.03514'); 插入文档(DOCUMENT_ID)值('019239.03521'); 插入文档(DOCUMENT_ID)值('019168.00845'); 插入文档(DOCUMENT_ID)值('019168.00846'); 插入文档(DOCUMENT_ID)值('019168.00847'); 插入文档(DOCUMENT_ID)值('019168.00848'); 插入文档(DOCUMENT_ID)值('019168.00850'); 插入文档(DOCUMENT_ID)值('019168.00860'); 插入文档(DOCUMENT_ID)值('019168.00861'); 插入文档(DOCUMENT_ID)值('019168.00866'); 插入文档(DOCUMENT_ID)值('019168.00867'); 插入文档(DOCUMENT_ID)值('019168.00868'); 插入文档(DOCUMENT_ID)值('019168.00869'); 插入文档(DOCUMENT_ID)值('019168.00870'); 选择 CAST(CAST(LEFT(DOCUMENT_ID,CHARINDEX('.',DOCUMENT_ID)-1) AS INT) AS VARCHAR(13)) + '.' + CAST(CAST(RIGHT(DOCUMENT_ID,CHARINDEX('.',REVERSE(DOCUMENT_ID))-1) AS INT) AS VARCHAR(13)) AS NEW_DOCUMENT_ID 来自文档

结果:

NEW_DOCUMENT_ID 19239.3491 19239.3497 19239.3498 19239.3500 19239.3501 19239.3503 19239.3514 19239.3521 19168.845 19168.846 19168.847 19168.848 19168.850 19168.860 19168.861 19168.866 19168.867 19168.868 19168.869 19168.870

检查a SQLFiddle。

【讨论】:

【参考方案2】:

测试数据

DECLARE @TABLE TABLE(Doc_ID VARCHAR(20))
INSERT INTO @TABLE VALUES 
('019168.00861'),
('019168.00866'),
('019168.00867'),
('019168.00868'),
('019168.00869'),
('019168.00870'),
('19168.870')

查询

SELECT CASE WHEN LEFT(Doc_ID, 1) = '0' 
               THEN SUBSTRING(Doc_ID, 2, CHARINDEX('.',Doc_ID)-1 ) 
            ELSE SUBSTRING(Doc_ID, 1, CHARINDEX('.',Doc_ID)) END 
        + CASE WHEN LEFT(SUBSTRING(Doc_ID, CHARINDEX('.',Doc_ID)+ 1, LEN(Doc_ID)), 1) = '0'
           THEN SUBSTRING(Doc_ID, CHARINDEX('.',Doc_ID)+ 2, LEN(Doc_ID))
            ELSE SUBSTRING(Doc_ID, CHARINDEX('.',Doc_ID)+ 1, LEN(Doc_ID))
            END 
                AS FinalValue
FROM @TABLE

结果集

╔════════════╗
║ FinalValue ║
╠════════════╣
║ 19168.0861 ║
║ 19168.0866 ║
║ 19168.0867 ║
║ 19168.0868 ║
║ 19168.0869 ║
║ 19168.0870 ║
║ 19168.870  ║
╚════════════╝

【讨论】:

以上是关于从 SQL 中删除两组前导零的主要内容,如果未能解决你的问题,请参考以下文章

从输入 type=number 中删除前导零

从Javascript中的数字中删除前导零[重复]

如何使用 C++ 从字符串中删除前导零?

从android中的自定义零按钮中删除edittext中的前导零

从 Oracle 日期中删除前导零

如何从浮点值Swift 3中删除前导零