在sql server中检查以数字和')'开头的字符串

时间:2015-10-14 10:30:18

标签: sql sql-server sql-server-2008

我有一些像

这样的字符串
<dt>

我需要查找某些文本是否以模式开头某些数字(不固定)后跟一个右括号')'

我试过了:

2) Some text
34) Some text more
5 Some other text

但它显示了印刷品中的所有字符串,而不是前两个字符串。如何解决这个问题。谢谢!

6 个答案:

答案 0 :(得分:5)

这不会考虑所有组合,但您可以检查。例如,如果字符串中有几个')'符号,它肯定会失败:

select * from t
where s like '[0-9]%)%' and s not like '[0-9]%[^0-9]%)%'

在此处http://sqlfiddle.com/#!3/3b5fd/3

答案 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)

这将提供您需要的结果。你基本上做了

的组合
  1. 检查字符串是否包含括号
  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