2016-12-15 69 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