提取大写字母和数字

Extract uppercase letters and numbers

我正在尝试处理一个字符串,以便仅采用大写字母和数字。尝试使用 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],都是 return 所有字母。

我想我可能遗漏了一些简单的东西?我发现了一些关于整理的建议,并尝试按照 this 将 COLLATE 与 PATINDEX 结合使用,但无法正常工作。

注意:我将此作为对 SQL 服务器数据库的一次性查询来查找一些数据 - 这不会在其他任何地方重复使用,因此性能,SQL 注入(在这种情况下经常提到)等都不是问题。

您可以使用 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