Quote:Quote:1. 数値型変数の検証
次の簡単な SQL の例では、Validate 関数を使用して、数値型変数に格納された値が指定した範囲内かどうかを判定しています。この例では、Min および Max パラメータを使用して範囲を指定しています。
SELECT Respondent.Serial,
Visits,
Validate(Visits, 5, 10) AS Valid
FROM vdata
WHERE Visits IS NOT NULL
以下に、結果セット中の最初の 5 つの回答を示します。
Respondent.Serial Visits Valid
----------------- ------ ------
1 1 False
4 6 True
5 2 False
6 1 False
7 1 False
Min および Max パラメータの代わりに、次のように Expr パラメータを使用しても、まったく同じ結果を得ることができます。
SELECT Respondent.Serial,
Visits,
Visits.Validate(, , '5..10') AS Valid
FROM vdata
WHERE Visits IS NOT NULL
今度は、変数名 (Visits) をパラメータとして渡す代わりに関数呼び出しの前に変数名を付けることで、変数のパラメータを省略している点に注意してください。これは、もう 1 つの関数呼び出し方法です。
Expr パラメータを使用すると、かなり複雑な条件を指定できます。データをフィルタ処理するときは、複雑な式を使用してフィルタを定義するより、Validate 関数と範囲式を使用した方が簡単にできることがあります。たとえば、次の例では、WHERE 句で Validate を使用して、Visits 変数の値が 5 ~ 10 (ただし、7 を除く)、または 50 以上の回答者を選択しています。
SELECT Respondent.Serial, Visits
FROM vdata
WHERE Visits IS NOT NULL
AND Validate(Visits, , , '5..10, ^7, 50..')
IS NOT NULL を使用して、Visits 変数に Null が格納されている回答者を除外している点に注意してください。WHERE 句から IS NOT NULL を削除すると、Visits 変数に Null が格納されているすべての回答者が含まれます。Validate は常に、Null に対して True を返すからです。
2. 文字型変数の検証
Validate 関数を使用して、文字型の回答が特定の条件を満たしているかどうかを判定することもできます。たとえば、回答に対して、指定した数の文字が含まれているか、すべて大文字かどうか、有効な製品コードまたは郵便番号か、などをチェックできます。次の例では、Validate を使用して、入力テキストが有効なメール アドレスかどうかを判定しています。ただし、メール アドレスが実在しているかどうかをチェックしているわけではなく、テキストがメール アドレスとして正しい文字の組み合わせになっているかどうかをチェックしているだけです。この例では、英数字、ハイフン、ピリオドの任意の組み合わせの後に、@ 記号が続き、さらにその後に英数字、ハイフン、ピリオドの任意の組み合わせが続くかどうかをチェックしています。
Dim Valid
Valid = Validate("www", , , "[-.\w]+\@[-.\w]+")
次の例では、製品コードが、2 つの大文字の後に 1 つのハイフン (-) と 8 桁の数字が続く文字列かどうかを判定しています。
Dim Valid
Valid = Validate("ID-86442000", , , "\u{2}-\d{8}")
次の例は、Museum サンプル データに対して実行される SQL クエリーです。このクエリーでは、Validate を使用して、Name 変数に格納されているテキストが 1 文字以上 45 文字以下で、句読点のない、1 個のスペースで区切られた 1 つ以上の単語で構成されているかどうかをチェックしています。
SELECT Respondent.Serial,
Name,
Name.Validate(1, 45, '\w+(\s\w+)+')
FROM vdata
Quote:Quote:Quote:Quote:Quote:1. 数値型変数の検証
次の簡単な SQL の例では、Validate 関数を使用して、数値型変数に格納された値が指定した範囲内かどうかを判定しています。この例では、Min および Max パラメータを使用して範囲を指定しています。
SELECT Respondent.Serial,
Visits,
Validate(Visits, 5, 10) AS Valid
FROM vdata
WHERE Visits IS NOT NULL
以下に、結果セット中の最初の 5 つの回答を示します。
Respondent.Serial Visits Valid
----------------- ------ ------
1 1 False
4 6 True
5 2 False
6 1 False
7 1 False
Min および Max パラメータの代わりに、次のように Expr パラメータを使用しても、まったく同じ結果を得ることができます。
SELECT Respondent.Serial,
Visits,
Visits.Validate(, , '5..10') AS Valid
FROM vdata
WHERE Visits IS NOT NULL
今度は、変数名 (Visits) をパラメータとして渡す代わりに関数呼び出しの前に変数名を付けることで、変数のパラメータを省略している点に注意してください。これは、もう 1 つの関数呼び出し方法です。
Expr パラメータを使用すると、かなり複雑な条件を指定できます。データをフィルタ処理するときは、複雑な式を使用してフィルタを定義するより、Validate 関数と範囲式を使用した方が簡単にできることがあります。たとえば、次の例では、WHERE 句で Validate を使用して、Visits 変数の値が 5 ~ 10 (ただし、7 を除く)、または 50 以上の回答者を選択しています。
SELECT Respondent.Serial, Visits
FROM vdata
WHERE Visits IS NOT NULL
AND Validate(Visits, , , '5..10, ^7, 50..')
IS NOT NULL を使用して、Visits 変数に Null が格納されている回答者を除外している点に注意してください。WHERE 句から IS NOT NULL を削除すると、Visits 変数に Null が格納されているすべての回答者が含まれます。Validate は常に、Null に対して True を返すからです。
2. 文字型変数の検証
Validate 関数を使用して、文字型の回答が特定の条件を満たしているかどうかを判定することもできます。たとえば、回答に対して、指定した数の文字が含まれているか、すべて大文字かどうか、有効な製品コードまたは郵便番号か、などをチェックできます。次の例では、Validate を使用して、入力テキストが有効なメール アドレスかどうかを判定しています。ただし、メール アドレスが実在しているかどうかをチェックしているわけではなく、テキストがメール アドレスとして正しい文字の組み合わせになっているかどうかをチェックしているだけです。この例では、英数字、ハイフン、ピリオドの任意の組み合わせの後に、@ 記号が続き、さらにその後に英数字、ハイフン、ピリオドの任意の組み合わせが続くかどうかをチェックしています。
Dim Valid
Valid = Validate("www", , , "[-.\w]+\@[-.\w]+")
次の例では、製品コードが、2 つの大文字の後に 1 つのハイフン (-) と 8 桁の数字が続く文字列かどうかを判定しています。
Dim Valid
Valid = Validate("ID-86442000", , , "\u{2}-\d{8}")
次の例は、Museum サンプル データに対して実行される SQL クエリーです。このクエリーでは、Validate を使用して、Name 変数に格納されているテキストが 1 文字以上 45 文字以下で、句読点のない、1 個のスペースで区切られた 1 つ以上の単語で構成されているかどうかをチェックしています。
SELECT Respondent.Serial,
Name,
Name.Validate(1, 45, '\w+(\s\w+)+')
FROM vdata
Ignore me
|
2016-03-17, 09:34 PM
But i don't wanna ignore you.
(2016-03-17, 09:28 PM)mssushii Wrote:Quote:Quote: (2016-03-17, 09:34 PM)Sazze Wrote: But i don't wanna ignore you. Do not quote all quotes
2016-03-24, 12:22 PM
Ancient History?
Geography? Math? Chinese? Japanese? Korean? Vikings? Im not ignoring this |
« Next Oldest | Next Newest »
|
Users browsing this thread: 1 Guest(s)