Sql 服务器查询方括号内的数字
Sql server query for numbers inside a square bracket
我的记录格式很少 table, ABCDEF
, [123]ABCDEF
, ABCDEF[ABC]
and ABCDEF[123]
字母数字不固定,它们各不相同。
我可以通过这样的方式轻松找到带括号的那些及其变体。
SELECT * FROM X WHERE Y LIKE '%/[%' ESCAPE '/'
但我想查找括号内只有三个数字且仅出现在行首或行尾的记录。即 [123]ABCDEF
和 ABCDEF[123]
格式。
我试过 LIKE '%[___/]' ESCAPE '/'
并希望操纵它只接受括号内的数字但无法使其工作。
一个巨大的警告是可能会有 ABC[123]DEF
格式的记录。这可能会很麻烦,因为我不想返回此类记录。我不知道有没有这样的记录,但我不能排除这种可能性。
我怎样才能做我想做的事?
括号用于提供有效的字符集。 [0-9]
表示0到9的任意数字,如果按字面意思使用括号,则必须进行转义:
DECLARE @t TABLE(T nvarchar(20))
INSERT @t values ('ABCDEF'), ('[123]ABCDEF'), ('ABCDEF[ABC]'), ('ABCDEF[123]'), ('AS[123]AS')
SELECT *
FROM @t
WHERE T LIKE '\[[0-9][0-9][0-9]\]%' ESCAPE '\'
OR T LIKE '%\[[0-9][0-9][0-9]\]' ESCAPE '\'
--Or match anywhere
--WHERE T LIKE '%\[[0-9][0-9][0-9]\]%' ESCAPE '\'
结果
T
--------------------
[123]ABCDEF
ABCDEF[123]
我的记录格式很少 table, ABCDEF
, [123]ABCDEF
, ABCDEF[ABC]
and ABCDEF[123]
字母数字不固定,它们各不相同。
我可以通过这样的方式轻松找到带括号的那些及其变体。
SELECT * FROM X WHERE Y LIKE '%/[%' ESCAPE '/'
但我想查找括号内只有三个数字且仅出现在行首或行尾的记录。即 [123]ABCDEF
和 ABCDEF[123]
格式。
我试过 LIKE '%[___/]' ESCAPE '/'
并希望操纵它只接受括号内的数字但无法使其工作。
一个巨大的警告是可能会有 ABC[123]DEF
格式的记录。这可能会很麻烦,因为我不想返回此类记录。我不知道有没有这样的记录,但我不能排除这种可能性。
我怎样才能做我想做的事?
括号用于提供有效的字符集。 [0-9]
表示0到9的任意数字,如果按字面意思使用括号,则必须进行转义:
DECLARE @t TABLE(T nvarchar(20))
INSERT @t values ('ABCDEF'), ('[123]ABCDEF'), ('ABCDEF[ABC]'), ('ABCDEF[123]'), ('AS[123]AS')
SELECT *
FROM @t
WHERE T LIKE '\[[0-9][0-9][0-9]\]%' ESCAPE '\'
OR T LIKE '%\[[0-9][0-9][0-9]\]' ESCAPE '\'
--Or match anywhere
--WHERE T LIKE '%\[[0-9][0-9][0-9]\]%' ESCAPE '\'
结果
T
--------------------
[123]ABCDEF
ABCDEF[123]