2014-05-06 103 views
-1

我有一组看起来像这样的数据;从SQL中删除两组前导零

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的

+3

你有没有尝试过自己的东西? – alroc

+1

@outisnihil在TSQL –

+0

中没有默认的分割函数[我需要在小数点后删除前导零](http://stackoverflow.com/questions/20577995/i-need-to-remove-leading - 小数点后的小数点) –

回答

0

测试数据

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 ║ 
╚════════════╝ 
1

双演员工很好地完成了这项工作。

 

    CREATE TABLE DOCS(DOCUMENT_ID VARCHAR(13)); 

    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019239.03491'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019239.03497'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019239.03498'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019239.03500'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019239.03501'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019239.03503'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019239.03514'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019239.03521'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00845'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00846'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00847'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00848'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00850'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00860'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00861'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00866'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00867'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00868'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00869'); 
    INSERT INTO DOCS (DOCUMENT_ID) VALUES ('019168.00870'); 

 

    SELECT 
     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 

    FROM DOCS 

结果:

 
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