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