【发布时间】:2014-02-06 16:03:35
【问题描述】:
我正在C# 中编写一个应用程序,我需要根据varchar 字段过滤数据库中的记录,该字段具有由另一个应用程序设置的复合ID (PREFIX#####)。
示例表:
RecordId | ObjectId | ...
1 | RFQ00001 | ...
2 | CO00002 | ...
3 | RFQ0101 | ...
4 | R101 | ...
5 | RFQ01 | ...
6 | RFQ101 | ...
我的应用程序(RFQ,CO,R,etc...) 中有一个ObjectId 前缀列表,但正如您所见,它们的长度并不完全相同。数字后缀的前导零数量并不总是相同。
我对我的 LIKE 模式有信心通过前缀 ... WHERE ObjectId LIKE 'RFQ[0-9]%' 进行过滤,但我无法找出模式来查找特定对象。
例如,如果我正在寻找 ID 为 1 的 RFQ 并尝试像 ... WHERE ObjectId LIKE 'RFQ[0-9]%1' 那样从上面的示例表中过滤记录,它将按预期将记录 1 返回为 5,但它也将包括记录 3 和 6,因为它们以 '1' 结尾(即使它们用于 ID 为 101 的 RFQ)。
有没有办法在 sql LIKE 模式中使用某种模式来表示 0 个或多个 0,这样我就可以按照 ... WHERE ObjectId LIKE 'RFQ[%0]1' 的方式做一些事情(意思是以 RFQ 开头并以 @987654340 结尾@ 由全 0 分隔或什么都没有)?或者有没有人有更好的想法来处理这个问题?
我无法控制数据如何输入到表中,也无法更改架构。
【问题讨论】:
标签: c# sql sql-server sql-server-2008 wildcard