【问题标题】:Function to remove all Non-alpha-numeric characters, superscripts, and subscripts, except a dash '-'删除所有非字母数字字符、上标和下标的函数,破折号“-”除外
【发布时间】:2020-02-11 04:43:15
【问题描述】:

我需要创建一个 T-SQL 函数,它只保留一个连字符(破折号“-”)并从给定字符串中删除所有非字母数字字符(加上所有空格、上标和下标)。

您可以在 SSMS 中测试上标/下标:

select  'Hello® World™ '

示例:

输入字符串

输出字符串:

HelloWorld-ThisIsATest123

我们将不胜感激任何解决方案或想法。

【问题讨论】:

  • 我可以理解删除一组字符(例如“特殊”)的要求(尽管您仍然必须定义什么是特殊的。“.”是特殊的吗?)。但是,您不能请求从字符串中删除 formatting。因为 sql 中的字符串不包含格式首先。你甚至不得不使用一张图片在这里展示——你肯定无法将红色下标放入 tsql 字符串中。
  • 您好 George,我编辑了我的问题,将特殊字符更改为“非字母数字”字符。但是,在 SQLServer 中可以看到并保存上标/下标。请参阅上面的示例。

标签: sql-server tsql


【解决方案1】:

检查此链接。这将删除所有字母数字字符。您也可以在包含列表中包含“-”。

How to strip all non-alphabetic characters from string in SQL Server?

在这个来自@George Mastros 的答案示例中,使用 '%[^a-zA-Z0-9-]%' 作为正则表达式,而不是 '%[^a-z]%'

这是重新格式化的函数,包含“-”和数字字符:

-- Reformatted function
Create Function [dbo].[RemoveNonAlphaCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS

Begin
Declare @KeepValues as varchar(50)
Set @KeepValues = '%[^a-zA-Z0-9\-]%' 
While PatIndex(@KeepValues, @Temp) > 0
    Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')

Return @Temp
End

--Call function    


 Select dbo.RemoveNonAlphaCharacters('Hello® World™   -123 !@#$%^')

输出:HelloWorld-123

【讨论】:

  • David,感谢您编辑并包含大写 A-Z,但正则表达式 '%[^a-zA-Z0-9\-]%' 并没有为我从字符串中删除反斜杠。出于某种原因,不需要反斜杠来转义“-”。您是否尝试在输入字符串中使用反斜杠?
【解决方案2】:

我发现了我的代码的问题 - 我以前有完全相同的功能,它没有删除上标/下标,我想知道为什么。这就是问题所在:输入/输出数据类型应该 NOTNVARCHAR,而仅仅是 varchar,否则它会在返回字符串中包含上标:

problem code :
    Create Function [dbo].[RemoveNonAlphaCharacters](@Temp NVarChar(1000))
           Returns NVarChar(1000)
           AS
            ...

【讨论】:

    猜你喜欢
    • 2022-09-27
    • 2014-10-05
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多