如何替换所有非数字值?

时间:2013-10-16 13:38:31

标签: sql teradata

这是TERADATA (不是SQL Server,不是Oracle)

我有一列电话号码:

(312)9879878
(298)989-9878
430-394-2934
394s9048ds987
..........

我需要将此列清理为

3129879878
2989899878
4303942934
3949048987
..........

所以只留下数字。应删除所有其他字母,特殊字符,连字符......我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

您的网站正在运行哪个版本的TD? 如果它是14或你安装了oTranslate UDF,你可以简单地做一个旧技巧嵌套翻译:

oTranslate(phonenum, oTranslate(phonenum, '0123456789', ''), '')

答案 1 :(得分:1)

答案:

  

DECLARE @Input varchar(1000)

     

SET @Input = '01 vishal 98-)6543'

     

DECLARE @pos INT

     

SET @Pos = PATINDEX('%[^ 0-9]%',@ Input)

     

WHILE @Pos> 0

     

BEGIN

SET @Input = STUFF(@Input,@pos,1,'')

SET @Pos = PATINDEX('%[^0-9]%',@Input)
     

END

     

SELECT @Input

谢谢你, Vishal Patel

答案 2 :(得分:1)

我有这个函数从字符串中拉出数字(0-9):

CREATE FUNCTION NumbersOnly(@STR VARCHAR(2000))
RETURNS VARCHAR(1000)
AS
BEGIN
    DECLARE @N INT
    DECLARE @NN VARCHAR(1000)
    SET @N = 0
    SET @NN = ''

    WHILE @N <= LEN(@STR)
    BEGIN
        IF SUBSTRING(@STR,@N,1) >= '0'
            AND SUBSTRING(@STR,@N,1) <= '9'
        BEGIN
            SET @NN = @NN + SUBSTRING(@STR,@N,1)
        END
        SET @N = @N + 1
    END

RETURN @NN
END