2009-07-17 40 views
0

我有以下形式的一些過濾器:如何處理與SQL Server多個通配符

對象A

+/- Start   End 
---------------------------------------------- 
+  000000080000 000000090000 
-  000000800500 
+  054* 

對象B

+/- Start   End 
---------------------------------------------- 
+  000000090000 000000100000 
+  00??00900500 
-  000000900500 
+  055* 

這意味着:

號除000000800500之外的000000080000和000000090000之間,以054開頭的數字與對象A相關聯。 000000090000和000000100000之間

號碼除了000000900500,數字匹配00 ?? 00900500(當然除了000000900500),並開始055號碼與對象B.

實施例的表結構的相關聯:

CREATE TABLE dbo.Filter 
(
    IDFilter int IDENTITY PRIMARY KEY 
) 

CREATE TABLE dbo.FilterRow 
(
    IDFilterRow int IDENTITY PRIMARY KEY 
    ,IDFilter  int FOREIGN KEY REFERENCES dbo.Filter(IDFilter) NOT NULL 
    ,Operator  bit --0 = -, 1 = + NOT NULL 
    ,StartNumber varchar(50) NOT NULL 
    ,EndNumber  varchar(50) 
) 

CREATE TABLE dbo.[Object] 
(
    IDObject int IDENTITY PRIMARY KEY 
    ,Name  varchar(10) NOT NULL 
    ,IDFilter int FOREIGN KEY REFERENCES dbo.Filter(IDFilter) NOT NULL 
) 

我需要一種方法來確保沒有數字可以與SQL(或CLR)中的多個對象相關聯,並且我真的不知道如何做這樣的事情(除了bruteforce)。

我有一個CLR函數Utils.fIsInFilter( '?8 *', '181235467895'),支持通配符和將返回1,如果它可以幫助...

回答

0

你能在SQL使用CLR函數2005年?

它使用比如連接可能在原始的SQL(在哪裏?變成[0-9]和*變得%),或許其次是CAST,但是這是CLR函數是...

+0

是的,我可以使用CLR函數或LIKE,我仍然不知道如何去做。 例如,我如何知道12345678912-1900000000範圍是否可能與通配符「1 * 98 * 9 ??」重疊? (編號122982123959,例如重疊) – Kevin 2009-07-17 19:16:41