j'ai des filtres sous la forme suivante:Comment gérer plusieurs jokers avec SQL Server
Objet A
+/- Start End
----------------------------------------------
+ 000000080000 000000090000
- 000000800500
+ 054*
objet B
+/- Start End
----------------------------------------------
+ 000000090000 000000100000
+ 00??00900500
- 000000900500
+ 055*
Cela signifie:
Nombres entre 000000080000 et 000000090000 sauf 000000800500 et les numéros commençant par 054 sont associés à l'objet A.
Les chiffres entre 000000090000 et 000000100000 000000900500, à l'exception des numéros correspondant à 00 ?? 00900500 (sauf 000000900500 bien sûr), et les numéros commençant par 055 sont associés à l'objet B.
l'exemple de la structure de la table:
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
)
J'ai besoin d'un moyen de m'assurer qu'aucun nombre ne peut être associé à plus d'un objet, en SQL (ou CLR), et je n'ai aucune idée de comment faire une telle chose (en plus de bruteforce).
J'ai une fonction CLR Utils.fIsInFilter ('? 8 *', '181235467895') qui prend en charge les caractères génériques et renverrait 1, si elle aide ...
Ouais, je peux utiliser une fonction CLR ou le LIKE, je ne sais toujours pas comment le faire. Par exemple, comment savez-vous si la plage 12345678912-1900000000 chevauche éventuellement le caractère générique "1 * 98 * 9 ??" ? (numéro 122982123959 par exemple chevauche) – Kevin
Maintenant, vous donné cet exemple plus complexe, je suppose que LIKE/CAST fonctionnerait pour single? anywhwere avec 123% ou% 123 types seulement. Je dis "possible" parce que les choses sont rarement "impossibles" mais je ne voudrais pas essayer ... – gbn