sql >> データベース >  >> RDS >> Sqlserver

SQL Server(T-SQL)でのCHARINDEX()関数のしくみ

    SQL Serverでは、T-SQL CHARINDEX()を使用できます。 別の文字式内の文字式の開始位置を見つける関数。

    両方の文字式を引数として指定します。オプションの引数を指定して、検索を開始する位置を指定することもできます。

    構文

    構文は次のようになります:

    CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

    expressionToFindの場所 は他の文字列で検索する式であり、 expressionToSearch もう1つの文字列です。オプションのstart_location expressionToSearch内の位置を指定するために使用できます 検索を開始する対象。

    最初に出現した位置のみが返されることに注意してください。

    次に例を示します:

    SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.') AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | 1        |
    +----------+
    

    この例では、最初の引数はBobです。 、これは、2番目の引数でBobを検索していることを意味します 。 Bobの位置であるため、結果は1になります。 最初は2番目の引数に表示されます。

    Bobにも気付くかもしれません 実際には文字列に2回表示されますが、最初に一致した位置のみが返されます。

    一致なし

    2番目の引数にBobが含まれていなかった場合 結果は0になります 。

    SELECT CHARINDEX('Bob', 'Kate likes beer. Kate also likes beef.') AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | 0        |
    +----------+
    

    開始位置の指定

    (オプションで)検索の開始位置を指定できます。これは、SQLServerがその開始位置の前にあるすべてのオカレンスをスキップすることを意味します。ただし、結果は、選択した開始位置からではなく、文字列全体内の位置に基づいて報告されます。

    デモンストレーションの例を次に示します。

    SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16) AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | 17       |
    +----------+
    

    この例では、位置16(2番目のBobの前のスペース)から検索を開始します。 )。その結果、Bobが最初に出現します。 はスキップされ、2番目の位置が返されます。また、その位置は文字列の先頭から17文字であることがわかります(検索を開始した場所から1文字だけですが)。

    大文字と小文字の区別

    COLLATEを追加することにより、大文字と小文字を区別する検索を明示的に実行できます。 SELECTの句 ステートメント:

    大文字と小文字を区別する検索と大文字と小文字を区別しない検索を含む例を次に示します。

    SELECT 
      CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CS_AS) AS 'Case-Sensitive',
      CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CI_AS) AS 'Case-Insensitive';

    結果:

    +------------------+--------------------+
    | Case-Sensitive   | Case-Insensitive   |
    |------------------+--------------------|
    | 0                | 11                 |
    +------------------+--------------------+
    

    _CSであるため、最初のものは大文字と小文字が区別されます (照合で)大文字と小文字を区別することを表します。 2つ目は、_CIであるため、大文字と小文字は区別されません。 大文字と小文字を区別しないことを表します。


    1. Oracle、日時をその月の最初の日にする

    2. SQLServerで月の最初の日を取得する3つの方法

    3. クラウド内のPostgreSQLクラスターのほぼゼロのダウンタイム自動アップグレード(パートII)

    4. MySQLデータベースからデータを削除する