我正在使用sql server存储过程进行数据导入。数据格式如下:
A7(5)B666
'5'是变量,它可以是多个数字#,即10,123 ...... ....
'666'也是一个变量。它是一个文本字符串,每个字符都是'6',但可以有#6',即666666,66,6,66666666666。
其他部分,A7()B
已修复。
有一种简单的方法可以在SP中验证这一点吗?我可以使用子字符串解析字符串,但它似乎太复杂了,因为我必须验证#
。在sql server中是否有类似于正则表达式的方法?我可以使用LIKE
运营商吗?除了WHERE
子句之外,我找不到如何使用它。
感谢
答案 0 :(得分: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