2016-12-15 73 views
0

我需要在這個SQL表(00-00066)選擇並得到轉換後本(0000066)轉換或鑄造VCHAR爲int沒有字符 ' - ' 或 -

就像>>>>>

declare @v1 varchar(21) = '00-00066', --- I need ignore this character '-' 
    @v2 varchar(21) = '000 -  66 ', 
    @v3 varchar(21) = '00-66' + char(13) + char(10), 
    @v4 varchar(21) = char(9) + '66000-00' 

選擇投(@ V1爲INT) - 錯誤 選擇投(@ V2作爲INT) - 錯誤 選擇投(@ V3作爲INT) - 錯誤 選擇投(@ V4爲INT) - 錯誤

+0

如果轉換爲int,則前面的零將消失,爲什麼不直接使用replace替換_ select replace(@ v1,' - ','') – Kostya

回答

1

DigitsOnlyEE是專門爲此問題開發的nd是否比我見過的任何函數都快。你只需要抓住代碼從所提供的鏈接創建它。

這裏是它如何工作的一個簡單的例子:

SELECT DigitsOnly FROM dbo.DigitsOnlyEE('000 -  66 '); 

結果:

00066 

要使用針對表:

-- sample data 
DECLARE @table TABLE (oldString varchar(100)); 
INSERT @table VALUES ('00-00066'),('000 -  66 '), 
('00-66' + char(13) + char(10)), (char(9) + '66000-00'); 

-- solution 
SELECT oldString, DigitsOnly 
FROM @table 
CROSS APPLY dbo.DigitsOnlyEE(oldString); 

結果:

enter image description here