我正在C#
编写一个应用程序,我需要根据varchar
字段筛选数据库中的记录,该字段具有由另一个应用程序设置的复合ID (PREFIX#####)
。
示例表:
RecordId | ObjectId | ...
1 | RFQ00001 | ...
2 | CO00002 | ...
3 | RFQ0101 | ...
4 | R101 | ...
5 | RFQ01 | ...
6 | RFQ101 | ...
我的应用ObjectId
中有一个(RFQ,CO,R,etc...)
前缀列表,但您可以看到它们的长度不同。数字后缀并不总是具有相同数量的前导零。
我对我的LIKE
模式有信心按前缀... WHERE ObjectId LIKE 'RFQ[0-9]%'
进行过滤,但我无法找出模式来查找特定对象。
例如,如果我正在寻找ID为RFQ
的{{1}},并且我尝试过滤上面示例表中的记录,例如此1
,则会返回记录{{1} } ... WHERE ObjectId LIKE 'RFQ[0-9]%1'
符合预期,但它也会包含记录1
和5
,因为它们以3
结尾(即使它们是针对ID为101的RFQ) )。
有没有办法在sql 6
模式中使用某种模式来表示0或更多0,所以我可以在'1'
的行中做一些事情(意思是以{{1}开头并以LIKE
结尾,以0或全部分隔)?或者有没有人有更好的想法处理这个问题?
我无法控制如何将数据输入表中,也无法控制更改架构的能力。
答案 0 :(得分:1)
您可以使用
WHERE ObjectId LIKE 'RFQ%1'
AND ObjectId NOT LIKE 'RFQ%[^0]%1'
[^0]
表示匹配任何非零的字符。