ホームページ  >  記事  >  データベース  >  SQL データ操作の基礎 (中級) 9

SQL データ操作の基礎 (中級) 9

黄舟
黄舟オリジナル
2016-12-17 14:38:20955ブラウズ

データの変換

SQL サーバーは、必要に応じてほとんどの値をある型から別の型に変換できるほど強力です。たとえば、SMALLINT データと INT データのサイズを比較する場合、明示的な型変換を実行する必要はありません。 SQL サーバーがあなたの代わりに作業を行います。ただし、文字データと他の種類のデータの間で変換する場合は、自分で変換を実行する必要があります。たとえば、MONEY フィールドからすべての値を抽出し、結果の後に文字列「US」を追加するとします。 次の例に示すように、関数 CONVERT() を使用する必要があります:

SELECT CONVERT(CHAR(8),PRice)+'US Dollars' FROM 注文

関数 CONVERT() は 2 つの変数を取ります。最初の変数はデータ型と長さを指定します。 2 番目の変数は、変換するフィールドを指定します。この例では、価格フィールドが 8 文字の長さの CHAR フィールドに変換されます。フィールド価格は、その後に文字列 'US を接続する前に文字型に変換する必要があります。 ドル』。

BIT、DATETIME、INT、または NUMERIC フィールドに文字列を追加する場合は、同じ変換操作を実行する必要があります。たとえば、次のステートメントは文字列「The」を追加します。 投票は」とすると、この SELECT ステートメントは BIT フィールドの値を返します:

SELECT '投票 is’+CONVERT(CHAR(1),vote) FROM 意見

以下はこのステートメントの結果の例です:

投票は 1

投票は 1 です

投票は 0 です

(3 row(s) 影響を受けます)

明示的な変換を実行しない場合、次のエラー メッセージが表示されます:

からの暗黙的な変換 データ型「varchar」から「bit」への変換は許可されていません。

CONVERT 関数を使用して、 このクエリを実行します。

文字列データを操作します

SQL Server には、さまざまなパターン マッチングや文字変換など、文字列に対して興味深い操作を実行できる関数や式が多数あります。このセクションでは、最も重要な文字の機能と表現の使用方法を学びます。

ワイルドカードの照合

Yahoo と同様の機能を備えたインターネット ディレクトリを構築するとします。サイト名、ユニフォーム リソース ロケーター (URL)、説明、カテゴリのリストを保持するテーブルを作成し、訪問者が次のことを行えるようにすることができます。 これらのコンテンツを取得するには、フォームにキーワードを入力します。

訪問者が、説明にキーワード取引が含まれるこのディレクトリから情報を取得したいとします。 カードサイトの一覧です。サイトの正しいリストを取得するには、次のようなクエリを使用してみてください:

SELECT site_name FROM site_directory WHERE site_desc=’トレーディングカード’

このクエリは機能します。ただし、説明に取引のみがあるもののみを返すことができます ストリングカードのサイト。たとえば、「私たちはトレーディングカードの最大のコレクションを持っています」という説明が World! のサイトは返却されません。

文字列を別の文字列の一部と一致させるには、ワイルドカード文字を使用する必要があります。パターン マッチングを実装するには、ワイルドカードとキーワード LIKE を使用します。次のステートメントは、ワイルドカードとキーワード LIKE を使用して上記のクエリを書き換え、すべての正しいサイトの名前を返します:

SELECT SITE_name FROM site_directory

WHERE site_desc LIKE ‘%trading cark%’

この例では、説明にトレーディング カードという表現が含まれるすべてのサイトが返されます。私たちは最高のものを持っていると説明されています 世界のトレーディングカードを集めよう! のサイトも返却されました。もちろん、サイトの説明に次のような内容が含まれている場合は取引します 段ボール箱をオンラインで 、サイトの名前も返されます。

この例ではパーセント記号が使用されていることに注意してください。パーセント記号はワイルドカード文字の一例です。 0 個以上の文字を表します。取引を入れることで カードはパーセント記号で囲まれており、すべてに文字列取引が埋め込まれています。 すべてのカード文字列が一致します。

さて、サイト ディレクトリが大きすぎて 1 ページに完全に収まらないとします。ディレクトリを 2 つの部分に分割することにします。最初のページには、イニシャルが A から M で始まるすべてのサイトを表示するとします。 2 ページ目では、N から Z で始まるすべてのサイトを表示するとします。最初のページのサイトリストを取得するには、次の SQL ステートメントを使用できます:

SELECT サイト名 FROM サイトディレクトリ WHERE サイト名 LIKE ‘[A-M]%’

この例では、式 [A-M] を使用して、最初の文字が A と M の間にあるサイトのみを抽出します。角括弧 ([]) は、指定された範囲内の単一の文字と一致するために使用されます。サイトを 2 ページ目に表示するには、次のステートメントを使用する必要があります:

SELECT site_name FROM site_directory

WHERE site_name LIKE ‘[N-Z]%’

この例では、括弧内の式は N と Z の間の任意の 1 文字を表します。

サイトのディレクトリが大きくなり、ディレクトリをさらに多くのページに分割する必要があるとします。 A、B、または C で始まるサイトを表示したい場合は、次のクエリを使用して実行できます:

SELECT サイト名 FROM サイトディレクトリ WHERE サイト名 LIKE 「[ABC]%」

この例では、括弧内の式は範囲を指定するのではなく、代わりに文字数を指定します。名前がこれらの文字のいずれかで始まるサイトが返されます。

括弧内の式に範囲と指定された文字の両方を含めることで、これら 2 つの方法を組み合わせることができます。たとえば、次のクエリを使用すると、最初の文字が C と F の間にあるサイト、または文字 Y で始まるサイトを取得できます。 サイト名 FROM サイトディレクトリ WHERE サイト名 LIKE ‘[C-FY]%’

この例では、Collegescape と Yahoo という名前のサイトが選択されますが、Magicw3 という名前のサイトは選択されません。

キャレット (^) を使用して特定の文字を除外することもできます。たとえば、名前が Y で始まらないサイトを取得するには、次のクエリを使用できます:

SELECT サイト名 FROM サイトディレクトリ WHERE サイト名 LIKE ‘[^Y]%’

特定の文字または文字範囲にキャレットを使用できます。

最後に、アンダースコア文字 (_) を使用すると、任意の 1 文字と一致させることができます。たとえば、次のクエリは、名前の 2 番目の文字に文字が含まれるすべてのサイトを返します:

SELECT サイト名 FROM サイトディレクトリ WHERE サイト名 LIKE 「M_crosoft」

この例では、Microsoft という名前のサイトと Macrosoft という名前のサイトの両方が返されます。ただし、Moocrosoft という名前のサイトは返されません。ワイルドカード文字「%」とは異なり、アンダースコアは単一の文字のみを表します。

注:

パーセント記号またはアンダースコア文字そのものと一致させたい場合は、それらを角括弧で囲む必要があります。ハイフン (-) を一致させる場合は、角かっこ内の最初の文字として指定します。角括弧を一致させたい場合は、角括弧も角括弧で囲みます。たとえば、次のステートメントは、説明にパーセント記号が含まれるすべてのサイトを返します:

SELECT site_name FROM site_directory WHERE site_desc LIKE 「%[%]%」

発音を一致させる

Microsoft SQL 文字列を音声的に照合できる関数が 2 つあります。関数 SOUNDEX() は文字列に発音記号コードを割り当て、関数 DIFFERENCE() は発音に従って 2 つの文字列を比較します。名前の正確なスペルはわからないが、発音はある程度わかっている場合、これら 2 つの関数を使用すると、レコードを検索するのに役立ちます。

たとえば、インターネット ディレクトリを作成する場合、訪問者がサイト名のスペルではなく、サイト名の発音に基づいてサイトを検索できるようにするオプションを追加するとよいでしょう。次のステートメントを考えてみましょう:

SELECT site_name FROM site_directory

WHERE DIFFERENCE(site_name , 「Microsoft」>3

このステートメントは関数 DEFFERENCE() を使用して、Microsoft によく似た名前のサイトを取得します。関数 DIFFERENCE() は 0 から 4 までの数値を返します。関数が 4 を返す場合は、発音が非常に似ていることを意味し、関数が 0 を返す場合は、2 つの文字列の発音が大きく異なることを意味します。

たとえば、上記のステートメントは Microsoft と Macrosoft というサイト名を返します。両方の名前の発音は Microsoft に似ています。前のステートメントの 3 より大きい値を 2 より大きい値に変更すると、Zicrosoft および Megasoft という名前のサイトも返されます。最後に、1 より大きい差異レベルのみが必要な場合は、Picosoft および Minisoft という名前のサイトも一致します。

関数 DIFFERENCE() がどのように機能するかを詳しく知るには、関数 SOUNDEX() を使用して、関数 DIFFERENCE() で使用される発音記号コードを返すことができます。以下に例を示します:

SELECT site_name ‘サイト名’,SOUNDEX(site_name) ‘サウンド like'

このステートメントは、フィールド site_name 内のすべてのデータとその発音記号コードを選択します。このクエリの結果は次のとおりです:

サイト名の音 like

………………………………………………………….

Yahoo Y000

Mahoo M000

Microsoft M262

Macrosoft M262

Minisoft M521

Microshoft M262

Zicrosoft Z262

Zaposoft Z121

ミリソフトM421

ナノソフトN521

メガソフト M221

Picosoft P221

(12 行) 影響を受けます)

発音記号コードを注意深く見ると、発音記号コードの最初の文字がフィールド値の最初の文字と同じであることがわかります。たとえば、Yahoo と Mahoo の発音記号は最初の文字だけが異なります。 Microsoft と Macrosoft の発音記号がまったく同じであることもわかります。

関数 DIFFERENDE() は、2 つの文字列の最初の文字とすべての子音を比較します。この関数は、母音が文字列の最初の文字でない限り、母音 (y を含む) を無視します。

残念ながら、SOUNDEX() と DIFFERENCE() の使用には欠点があります。 WHERE 句にこれら 2 つの関数を含むクエリのパフォーマンスは良好ではありません。したがって、これら 2 つの関数は注意して使用する必要があります。

スペースの削除

TTRIM() と LTRIM() という 2 つの関数があり、文字列からスペースを削除するために使用できます。関数 LTRIM() は文字列の先頭にあるすべてのスペースを削除し、関数 RTRIM() は文字列の末尾にあるすべてのスペースを削除します。以下は関数 RTRIM() の使用例です:

選択する RTRIM(サイト名) FROM site_directory

この例では、サイト名の末尾に余分なスペースがある場合、余分なスペースはクエリ結果から削除されます。

これら 2 つの関数をネストして、文字列の前後のスペースを同時に削除できます:

SELECT LTRIM(RTRIM(サイト名) FROM site_directory

これら 2 つの関数は、CHAR フィールドから余分なスペースを削除するときに非常に便利です。文字列を CHAR フィールドに格納すると、その文字列にはフィールドの長さに合わせて余分なスペースが追加されることに注意してください。この 2 つの機能を使用すると、無駄なスペースを削除することができ、この問題を解決できます。

上記は SQL データ操作の基礎 (中級) 9 の内容です。その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。