从字符串sql server中删除数字

CR4*_*G14 20 sql sql-server sql-server-2008

我有一个大型数据库,我想在其中进行部分字符串搜索.用户将输入字符:JoeBloggs.

为了论证,如果我Joe 23 Blo Ggs 4在数据库中有一个名字.我想删除AZ以外的所有名称.

我有REPLACE(Name, ' ','')删除空格的UPPER()功能和大写名称的功能.

是否有一种更有效的快速方式,可能通过正则表达式来替换除AZ以外的任何东西.我无法更改数据库中的值.

提前致谢

Jat*_*tin 35

第一选择 -

您可以嵌套REPLACE()最多32级的功能.它运行得很快.

REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE (@str, '0', ''),
'1', ''),
'2', ''),
'3', ''),
'4', ''),
'5', ''),
'6', ''),
'7', ''),
'8', ''),
'9', '')
Run Code Online (Sandbox Code Playgroud)

第二种选择 - 反过来 -

从数字+ SQL中删除非数字数据

第三个选项 - 如果你想使用正则表达式

然后 http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=27205


Ben*_*son 11

这个对我有用

CREATE Function [dbo].[RemoveNumericCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin

    Declare @NumRange as varchar(50) = '%[0-9]%'
    While PatIndex(@NumRange, @Temp) > 0
        Set @Temp = Stuff(@Temp, PatIndex(@NumRange, @Temp), 1, '')

    Return @Temp
End
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它

SELECT dbo.[RemoveNumericCharacters](Name) FROM TARGET_TABLE
Run Code Online (Sandbox Code Playgroud)


小智 6

我刚刚开始重新学习 SQL...我在某处读到了这个:

SELECT TRIM('0123456789' FROM customername )
Run Code Online (Sandbox Code Playgroud)

您还可以使用它来删除空格或其他符号。只需将其包含在引号内的第一个参数中即可''


Sut*_*rth 5

请尝试以下查询。其中val是您的字符串或列名。

CASE WHEN PATINDEX('%[a-z]%', REVERSE(val)) > 1
                THEN LEFT(val, LEN(val) - PATINDEX('%[a-z]%', REVERSE(val)) + 1)
            ELSE '' END
Run Code Online (Sandbox Code Playgroud)