2014-02-06 51 views
0

我寫在C#的應用程序,我需要在基於具有被其他應用程序設置Id的化合物(PREFIX#####)一個varchar領域的數據庫,篩選記錄。數字LIKE條件 - 零點或以上前導零

示例表:

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]%'過濾信心,但我無法找出一個模式來查找特定對象。

例如,如果我找一個RFQ ID爲1,我嘗試從示例表篩選記錄上面這樣... WHERE ObjectId LIKE 'RFQ[0-9]%1',它將返回記錄1作爲5如預期,但它也將包括記錄36因爲它們以'1'結尾(即使它們的ID爲101)。

有什麼辦法有某種模式來表示在SQL 0以上的0 LIKE模式,所以我可以做沿着... WHERE ObjectId LIKE 'RFQ[%0]1'線(含義與RFQ開始的東西,並與1由全0或無隔離端)?還是有人有更好的主意來處理這個問題?

我無法控制數據如何輸入到表中,也無法更改模式。

回答

1

您可以使用

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

[^0]手段匹配不爲零的任何字符。

+0

對不起,我只是在示例表中添加了另一條記錄以顯示並不總是前導零。這將錯誤地包含記錄6,因爲沒有前導零。 – Greg

+0

@Greg [不,不](http://sqlfiddle.com/#!3/7c036/1)。 '1'與'[^ 0]'匹配,所以'NOT LIKE'是錯誤的。 –

+0

啊,我站好了...... – Greg