2

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

我有一列电话号码:

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

我需要将此列清理为

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

所以只有数字应该留下。应删除所有其他字母、特殊字符、连字符……。我怎样才能做到这一点?

4

3 回答 3

4

您的站点上运行的是哪个 TD 版本?如果它是 14 或者你安装了 oTranslate UDF,你可以简单地做一个嵌套 Translate 的老技巧:

oTranslate(phonenum, oTranslate(phonenum, '0123456789', ''), '')
于 2013-10-16T18:19:15.130 回答
1

回答 :

声明 @Input varchar(1000)

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

声明@pos INT

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

而@Pos > 0

开始

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

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

结尾

选择@输入

谢谢你,维沙尔·帕特尔

于 2013-10-16T14:01:24.603 回答
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
于 2013-10-16T14:07:46.943 回答