Sql 如何替换所有非数值?

Sql 如何替换所有非数值?,sql,teradata,Sql,Teradata,这是TERADATA(不是SQL Server,不是Oracle) 我有一列电话号码: (312)9879878 (298)989-9878 430-394-2934 394s9048ds987 .......... 我需要把这根柱子打扫干净 3129879878 2989899878 4303942934 3949048987 .......... 因此,只有数字应该保持不变。所有其他字母、特殊字符、连字符。。。应该删除。我该怎么做?回答: 声明@Input varchar(1000) 设

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

我有一列电话号码:

(312)9879878
(298)989-9878
430-394-2934
394s9048ds987
..........
我需要把这根柱子打扫干净

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

因此,只有数字应该保持不变。所有其他字母、特殊字符、连字符。。。应该删除。我该怎么做?

回答:

声明@Input varchar(1000)

设置@Input='01 vishal 98-)6543'

声明@pos INT

设置@Pos=PATINDEX(“%[^0-9]]”,@Input)

而@Pos>0

开始

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

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

选择@Input

谢谢你,
Vishal Patel

我有一个从字符串中提取数字(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
CREATE FUNCTION NumbersOnly(@STR VARCHAR(2000))
返回VARCHAR(1000)
作为
开始
声明@N INT
声明@NN VARCHAR(1000)
设置@N=0
设置@NN=''
而@N='0'

以及子字符串(@STR,@N,1)您的站点正在运行哪个TD版本? 如果是14或安装了oTranslate UDF,您只需执行一个老技巧嵌套转换:

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

谢谢,但是我在第一行出现了语法错误:
期望在“(”和“@”)之间出现一些东西。
我使用SQL Server尝试了这个方法……可能有语法差异?我有14.01,所以我的查询看起来会是什么样子:
选择OtrTranslate(phonenum,OtrTranslate(phonenum,'0123456789',''),“”)FROM…
是的,完全正确。只需尝试一下,我就得到了一个错误:
数据类型phonenum与定义的类型名称不匹配
此错误通常表示没有具有此名称的函数。返回的内容是:SELECT*FROM dbc.function SV,其中像“%TRANSLATE%”这样的函数名返回了0行。您是对的:没有这样的函数可以您可以编辑问题并共享示例的表定义。