我有一组看起来像这样的数据;
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。
答案 0 :(得分:1)
Double Casts相当不错。
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。
答案 1 :(得分: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 ║
╚════════════╝