0

特定のテーブルにあるファーストネーム、ミドルネーム、ラストネームを検証するために使用できる関数をSQLで記述しています。

現在、無効と見なして入力を削除する文字のASCIIコードのリストに取り組んでいます。

私の計画は、無効と思われる文字の文字コードを含むテーブルを作成し、現在の入力レコードから無効な各文字を置き換えるカーソルを作成することです。

私はASCIIテーブル全体を処理する必要がありますか、それとも私が構築するために見ることができるこのような同様の取り組みを見たことがありますか?

4

2 に答える 2

2

SQLのコードを使用してデータをスキャンして無効な文字を探すのは非常に遅いアプローチであり、満足できるとは限りません。

ほとんどの人は、データベースの外でこれを検証するだろうと思います。

データベース内で実行する必要がある場合は、データベースの固有言語(Oracle PL / SQL、MSSQL tsql)を使用して文字列をチェックするトリガーを作成し、有効な文字リストをスクリプトにコーディングするだけです。

そして、アクセントのある名前や他の面白いキャラクターが現れた場合はどうなりますか?

于 2009-11-23T19:55:38.323 に答える
1

これはほとんど私たちがしていることです

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

もちろん、これはテーブル全体ではなくデータ入力で実行する必要があります。これは永遠にかかるためです。

于 2009-11-23T19:57:31.377 に答える