检查字符串是否包含列值

时间:2018-07-06 13:40:34

标签: sql tsql

我正在尝试通过查找字符串中包含的每个帐户来检索有关多个帐户的信息。我有帐号43000-000-0040000-100-0045075-200-00,它们都可以在account列中找到。

SELECT * FROM records WHERE CHARINDEX('43000-000-00', account)可以正常工作,但是用新字符扩展字符串或将帐户字符串替换为该列将不再产生结果。我有什么方法可以检测'43000-000-00, 40000-100-00, 45075-200-00'中的每个帐户或另一个类似格式的字符串?

编辑:帐户遵循XXXXX-XXX-XX格式,在某些情况下使用字母

2 个答案:

答案 0 :(得分:1)

您似乎想要:

where account like '43000-000-00%' or
      account like '40000-100-00%' or
      account like '45075-200-00%'

如果这些完全匹配,请使用in

where account in ('43000-000-00', '40000-100-00%', '45075-200-00')

如果您实际上想用逗号传递字符串,则需要研究string_split()函数。

答案 1 :(得分:0)

您还不太具体。第二个数字的元组的第一位是唯一的变化吗?如果是这样,它将完成这项工作:

SELECT * 
FROM records 
WHERE account like '40000-[0-9]00-00'

或者如果只关心提到的三个值,请使用[0-2]而不是[0-9]

根据评论提供的通用字母数字版本:

SELECT * 
FROM records 
WHERE account like '[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]-[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]-[0-9a-zA-Z][0-9a-zA-Z]'