提取大写字母和数字

时间:2015-02-18 17:24:43

标签: sql-server tsql sql-server-2008-r2

我正在尝试处理字符串,以便只采用大写字母和数字。尝试使用PATINDEX,因为我想保持这种简洁 - 它将成为更大查询的一部分。

有很多例子显示出类似的东西,但我似乎错过了一些东西。到目前为止我已经

DECLARE @string varchar(100)

SET @string = 'AbcDef12-Ghi'

WHILE PATINDEX('%[^A-Z0-9]%',@string) <> 0
    SET @string = STUFF(@string,PATINDEX('%[^A-Z0-9]%',@string),1,'')

SELECT @string

根据例如this question,但这似乎没有做我需要的。

使用[^0-9]输出12,这是正确的。

但是[^A-Z]输出AbcDefGhi,即大写和小写。无论我使用[^A-Z]还是[^a-z],都会返回所有字母。

我想我可能会遗漏一些简单的东西?我找到了一些关于整理的建议,并尝试按照this使用COLLATE与PATINDEX,但无法使其工作。

注意:我这样做是作为SQL Server数据库上的一次性查询来查找一些数据 - 这不会在其他地方重复使用,所以像性能,SQL注入(在此上下文中经常提到)等。不是问题。

1 个答案:

答案 0 :(得分:6)

您可以使用COLLATE和区分大小写的排序规则(例如Latin1_General_BIN

执行此操作
DECLARE @string varchar(100)

SET @string = 'AbcDef12-Ghi'

WHILE PATINDEX('%[^A-Z0-9]%',@string COLLATE Latin1_General_BIN) <> 0
BEGIN
    SET @string = STUFF(
        @string,
        PATINDEX('%[^A-Z0-9]%',@string COLLATE Latin1_General_BIN),1,''
    )
END

SELECT @string

这将输出:

  

AD12G