我有一些像
这样的字符串<dt>
我需要查找某些文本是否以模式开头某些数字(不固定)后跟一个右括号')'
我试过了:
2) Some text
34) Some text more
5 Some other text
但它显示了印刷品中的所有字符串,而不是前两个字符串。如何解决这个问题。谢谢!
答案 0 :(得分:5)
这不会考虑所有组合,但您可以检查。例如,如果字符串中有几个')'符号,它肯定会失败:
select * from t
where s like '[0-9]%)%' and s not like '[0-9]%[^0-9]%)%'
答案 1 :(得分:5)
SQL Server没有很好的模式匹配,但如果您知道)
前面的数字总是小于500,那么您可以这样做:
DECLARE @myString VARCHAR(100) = '266) Some text'
If (PATINDEX('[0-9])%', @myString) > 0) OR --Check for one digit
(PATINDEX('[0-9][0-9])%', @myString) > 0) OR --Check for two digits
(PATINDEX('[0-9][0-9][0-9])%', @myString) > 0) --Check for three digits
begin
print @myString
end
答案 2 :(得分:2)
这将提供您需要的结果。你基本上做了
的组合检查括号内的任何字符是否为数字
SELECT
mystring,
CHARINDEX(')',mystring) as containsParenthesis,
SUBSTRING(mystring,0,CHARINDEX(')',mystring)) as beforeParenthesis,
PATINDEX('%[^0-9]%',SUBSTRING(mystring,0,CHARINDEX(')',mystring))) as containsSomethingBesidesNumbers
FROM
(
SELECT '2) Some text' as mystring UNION ALL
SELECT '34) Some text more' UNION ALL
SELECT '5 Some other text'
)t
WHERE
CHARINDEX(')',mystring) > 0 AND PATINDEX('%[^0-9]%',SUBSTRING(mystring,0,CHARINDEX(')',mystring))) = 0
答案 3 :(得分:1)
试试这个:
SET @MYSTRING = REPLACE(@MYSTRING, '.', '');
If ISNUMERIC(SUBSTRING(@mystring, 1, charindex(')', @mystring) - 1)) = 1
begin
print @mystring
end
答案 4 :(得分:1)
SET @MYSTRING = REPLACE(@MYSTRING, '.', '');
If ISNUMERIC(SUBSTRING(@mystring, 1, charindex(')', @mystring) - 1)) = 1
begin
print @mystring
end
答案 5 :(得分:0)
尝试使用ISNUMERIC
SET @mystringtrimmed = SUBSTRING(@mystring, 1, CHARINDEX(')', @mystring) - 1);
IF ISNUMERIC(@mystringtrimmed) = 1
BEGIN
PRINT @mystring
END