Sql 如何替换所有非数值?
这是TERADATA(不是SQL Server,不是Oracle) 我有一列电话号码: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) 设
(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行。您是对的:没有这样的函数可以您可以编辑问题并共享示例的表定义。