特定のテーブルにあるファーストネーム、ミドルネーム、ラストネームを検証するために使用できる関数をSQLで記述しています。
現在、無効と見なして入力を削除する文字のASCIIコードのリストに取り組んでいます。
私の計画は、無効と思われる文字の文字コードを含むテーブルを作成し、現在の入力レコードから無効な各文字を置き換えるカーソルを作成することです。
私はASCIIテーブル全体を処理する必要がありますか、それとも私が構築するために見ることができるこのような同様の取り組みを見たことがありますか?
特定のテーブルにあるファーストネーム、ミドルネーム、ラストネームを検証するために使用できる関数をSQLで記述しています。
現在、無効と見なして入力を削除する文字のASCIIコードのリストに取り組んでいます。
私の計画は、無効と思われる文字の文字コードを含むテーブルを作成し、現在の入力レコードから無効な各文字を置き換えるカーソルを作成することです。
私はASCIIテーブル全体を処理する必要がありますか、それとも私が構築するために見ることができるこのような同様の取り組みを見たことがありますか?
SQLのコードを使用してデータをスキャンして無効な文字を探すのは非常に遅いアプローチであり、満足できるとは限りません。
ほとんどの人は、データベースの外でこれを検証するだろうと思います。
データベース内で実行する必要がある場合は、データベースの固有言語(Oracle PL / SQL、MSSQL tsql)を使用して文字列をチェックするトリガーを作成し、有効な文字リストをスクリプトにコーディングするだけです。
そして、アクセントのある名前や他の面白いキャラクターが現れた場合はどうなりますか?
これはほとんど私たちがしていることです
declare @currentCharacter char(1)
declare @alphanumericString VARCHAR(250)
declare @inputStringLength int
declare @positionIndex int
--init variables
select @positionIndex = 1
select @alphanumericString = ''
--get the string length
select @inputStringLength = LEN(@inputString)
--loop through the set
while @positionIndex <= @inputStringLength
begin
--get each character
select @currentCharacter = substring(@inputString,@positionIndex,1)
--make sure its between 0-9, A-Z, or a-z
if (ascii(@currentCharacter) > 31 and ascii(@currentCharacter) < 126)
set @alphanumericString = @alphanumericString + @currentCharacter
--increament counter
set @positionIndex = @positionIndex + 1
end
return @alphanumericString
end
もちろん、これはテーブル全体ではなくデータ入力で実行する必要があります。これは永遠にかかるためです。