【问题标题】:Remove two sets of leading zeros from SQL从 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。

【问题讨论】:

标签: sql sql-server tsql decimal


【解决方案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  ║
    ╚════════════╝
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多