3

我正在使用 sql server 存储过程进行数据导入。数据格式如下:

A7(5)B666

'5'是一个变量,它可以是多个数字#,即10, 123, ....

'666' 也是一个变量。它是一个文本字符串,每个字符都是“6”,但可以有任何“6”#,即 666666、66、6、66666666666。

其他部分,A7()B是固定的。

有没有一种简单的方法可以在 SP 中验证这一点?我可以使用子字符串解析字符串,但它似乎太复杂了,因为我必须验证#. sql server中有没有类似正则表达式的方法?我可以使用LIKE运算符吗?WHERE除了 in子句之外,我找不到如何使用它。

谢谢

4

1 回答 1

2

尝试这个

DECLARE @t TABLE(v VARCHAR(500))
INSERT INTO @t 
VALUES
     ('A7(5)B666'),
     ('A7(555)B66666'),
     ('A7(5ups)B666'),
     ('A7(5)B6ups66'),
     ('A7(5)B666  ')

SELECT v, 
    CASE WHEN SUBSTRING(v,CHARINDEX('(',v)+1,CHARINDEX(')',v)-CHARINDEX('(',v)-1) LIKE '%[^0-9]%' 
         THEN 0 
         ELSE 1 
    END isNumberInBrackets, 
    CASE WHEN SUBSTRING(v,CHARINDEX(')B',v)+2,DATALENGTH(v)-CHARINDEX('(',v)-1) LIKE '%[^0-9]%' 
         THEN 0 
         ELSE 1 
    END isNumberAfterB
FROM @t
于 2013-07-05T03:58:06.233 回答