数字状态 - 零或更多前导零

时间:2014-02-06 16:03:36

标签: c# sql sql-server sql-server-2008 wildcard

我正在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'符合预期,但它也会包含记录15,因为它们以3结尾(即使它们是针对ID为101的RFQ) )。

有没有办法在sql 6模式中使用某种模式来表示0或更多0,所以我可以在'1'的行中做一些事情(意思是以{{1}开头并以LIKE结尾,以0或全部分隔)?或者有没有人有更好的想法处理这个问题?

我无法控制如何将数据输入表中,也无法控制更改架构的能力。

1 个答案:

答案 0 :(得分:1)

您可以使用

WHERE  ObjectId LIKE 'RFQ%1'
       AND ObjectId NOT LIKE 'RFQ%[^0]%1'

[^0]表示匹配任何非零的字符。