如何在sqlserver中获取字符串中的数字(删除字符串中的数字)

时间:2010-02-03 13:45:06

标签: sql-server

如何截断sqlserver

中字符串中的数字

ForEx:字符串值:200可能不是[34534]

结果:许多不是(reulst包含非数字)

2 个答案:

答案 0 :(得分:0)

如果你想从字符串中删除所有数字,有各种可能的方法:

1)纯TSQL:

e.g。 (不一定是最好/最漂亮的方式)

DECLARE @Test VARCHAR(50)
SET @Test = 'Test12value8with numbers'

DECLARE @index INTEGER
SELECT @index = PATINDEX('%[0-9]%', @Test)

WHILE (@index > 0)
    BEGIN
        SET @Test = LEFT(@Test, @index - 1) + RIGHT (@Test, (LEN(@Test) - @index))
        SELECT @index = PATINDEX('%[0-9]%', @Test)
    END

SELECT @Test

2)CLR功能(SQL 2005+) - 创建一个CLR函数来进行替换(即在.NET中),并调用该函数

3)根本不要在SQL中进行操作,按原样返回数据并将格式化/清理保留到调用代码(这将在字符串操作时表现更好)。

第三种选择将是我自然会选择的选项,除非有充分的理由不这样做。

答案 1 :(得分:0)

SQL Server本身不支持REPLACE()函数中的正则表达式。您是否尝试过以下方法之一:

  1. Leverage .NET regex support by integrating SQL Server and the CLR
  2. 编写一个循环遍历字符串的存储过程或用户定义函数,并使用PATINDEX()来定位数字(PATINDEX允许您指定要查找的模式,REPLACE不会)
  3. 这两个都有一些性能影响,所以我会小心你如何使用它们。