SQL查询从字符的超集中查找记录

时间:2014-07-28 13:59:30

标签: sql sql-server sql-server-ce

我有一个应用程序,它将为我提供一个字符串,该字符串的某些未知部分可能是在另一个记录的列中找到的整个字符串,即

我获得了" A12345B"表格中可能有一条记录,其[SerialNumber]列等于" 12345"或者也许是" 123"。

是否有sql查询或算法可以建议我用来查找这种情况的匹配记录?谢谢!

3 个答案:

答案 0 :(得分:2)

以下是实现这一目标的几种方法:

假设我们有一个搜索变量:

DECLARE @Input NVARCHAR(50) = 'ABC12345'

使用LIKE运算符

SELECT *
FROM MyTable
WHERE @Input LIKE '%' + SerialNumber + '%'

如果您需要排除空白SerialNumber,请添加以下行:

AND SerialNumber <> ''

使用CHARINDEX功能

SELECT *
FROM MyTable
WHERE CHARINDEX(SerialNumber, @Input) > 0

答案 1 :(得分:0)

如果我正确理解您的问题,那么您正在寻找CHARINDEX。它接受两个字符串并在另一个字符串中查找。

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

答案 2 :(得分:0)

所以你所说的是给你一个很长的字符串,你需要找到任何值,这个值是输入你的查询的原始字符串的子串。如果是这种情况,那么以下内容将起作用:

DECLARE @StringYouAreGiven VARCHAR(255) = 'A12345B'

SELECT *
FROM [Your Table Name Here]
WHERE PATINDEX(CAST(SerialNumber AS VARCHAR(255)), @StringYouAreGiven) > 0
--If SerialNumber is a string datatype then the overhead of a CAST is not necessary)

这将获取SerialNumber列中的值,并将其与“在这种情况下'A12345B'中传递的值进行比较。如果SerialNumber列中的值出现在传入的值中的任何位置,则PATINDEX(模式索引)将大于0并且将返回记录。希望这有帮助!