Merci pour vos réponses.
La proposition sur '%[^0-9]%'
était une belle révélation pour moi, car je ne connaissais pas l'opérateur ^
avant.
J'ai effectué deux versions de la contrainte requise. Un utilisant "seulement" AND, OR, sous-chaînes et isnumeric. Pas d'indices fantaisistes ou d'exclusions. Was waaaay trop longtemps. L'autre version comprenait AND, OR, sous-chaînes et insmuric, mais avec l'inclusion des opérations^proposées. Ça a l'air beaucoup plus agréable. Puis, à la fin, je suis allé avec une troisième solution :-) Ajout d'une colonne bool sur la base de données, RequiresCreditorValidation, et implémenté une regex dans mon code C#.
Pour d'autres qui espèrent tirer profit des contrôles qui en résultent, les voici. En commençant par le "laid" un:
CHECK ((val NOT IN ('+','-') AND (ISNUMERIC(val) = 1) OR
(ISNUMERIC(SUBSTRING(val, 1, DATALENGTH(val) -1))) = 1) AND
((SUBSTRING(val, (DATALENGTH(val)),1) LIKE '[0-9]') OR
(SUBSTRING(val, DATALENGTH(val),1) = '-')) AND
(SUBSTRING(val, 1, 1) NOT IN ('+','-')))
Le second:
CHECK ((SUBSTRING(val, 1, DATALENGTH(val) - 1) NOT LIKE '%[^0-9]%') AND
(SUBSTRING(val, DATALENGTH(val),1) LIKE '%[0-9-]') AND (DATALENGTH(val) > 0)
AND SUBSTRING(val, 1,1) NOT IN ('+','-'))
Et puis le Regex:
Merci
var allButLast = kreditorId.Substring(0, kreditorId.Length - 1);
if (Regex.Match(allButLast, "[^0-9]").Success)
return false;
if (!kreditorId.EndsWith("-"))
if (Regex.Match(kreditorId, "[^0-9]").Success)
return false;
return true;
toutes des réponses bonnes, qualifiés et rapides.
Ce n'est généralement pas quelque chose que vous pouvez faire avec une contrainte de vérification ... certainement pas dans ANSI SQL. Avec quelle plate-forme travaillez-vous? –