返信ありがとうございます。
私は以前にオペレーターを'%[^0-9]%'
知らなかったので、上の提案は私にとって素晴らしい目を見張るものでした。^
必要な制約の2つのバージョンを実行しました。「のみ」のAND、OR、部分文字列、およびisnumericを使用するもの。派手なインデックスや除外はありません。わぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ もう1つのバージョンは、AND、OR、部分文字列、およびinsmuricで構成されていましたが、提案された^操作が含まれていました。ずっと見栄えがします。
次に、最後に、3番目のソリューションを使用しました:-) DBにbool列、RequiresCreditorValidationを追加し、C#コードに正規表現を実装しました。
結果のチェックの恩恵を受けることを望んでいる他の人のために、ここにあります。「醜い」ものから始めて:
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 ('+','-')) )
2つ目:
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 ('+','-') )
そして、正規表現:
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;
良い、資格のある、迅速な返信をありがとうございました。