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

SQLServerで英数字を含む行を返す3つの方法

    SQLServerで英数字を含む行を返す3つの例を次に示します。

    英数字はアルファベットと数字です。

    サンプルデータ

    次の表があるとします。

    CREATE TABLE t1 (
        c1 varchar(255) NULL
        );
    
    INSERT INTO t1 VALUES
        ('Music'),
        ('Live Music'),
        ('Café'),
        ('Café Del Mar'),
        ('100 Cafés'),
        ('[email protected]'),
        ('1 + 1'),
        ('()'),
        ('[email protected]#&()–[{}]:;'',?/*'),
        ('`~$^+=<>“'),
        ('$1.50'),
        ('Player 456'),
        ('007'),
        (null),
        (''),
        ('é'),
        ('É'),
        ('é 123'),
        ('ø'),
        ('ø 123');
    SELECT c1 FROM t1;

    結果:

    +----------------------+
    | c1                   |
    +----------------------+
    | Music                |
    | Live Music           |
    | Café                 |
    | Café Del Mar         |
    | 100 Cafés            |
    | [email protected]    |
    | 1 + 1                |
    | ()                   |
    | [email protected]#&()–[{}]:;',?/*   |
    | `~$^+=<>“            |
    | $1.50                |
    | Player 456           |
    | 007                  |
    | NULL                 |
    |                      |
    | é                    |
    | É                    |
    | é 123                |
    | ø                    |
    | ø 123                |
    +----------------------+

    例1:行に英数字データが含まれている

    次のコードは、英数字を含む(また、英数字以外の文字を含む場合もある)行を返します。

    SELECT c1 FROM t1
    WHERE c1 LIKE '%[a-zA-Z0-9]%';

    結果:

    +-------------------+
    | c1                |
    |-------------------|
    | Music             |
    | Live Music        |
    | Café              |
    | Café Del Mar      |
    | 100 Cafés         |
    | [email protected] |
    | 1 + 1             |
    | $1.50             |
    | Player 456        |
    | 007               |
    | é                 |
    | É                 |
    | é 123             |
    | ø                 |
    | ø 123             |
    +-------------------+

    例2:行には英数字データのみが含まれています

    次のコードは、英数字のみを含む行を返します。

    SELECT c1 FROM t1
    WHERE c1 NOT LIKE '%[^a-zA-Z0-9 ]%'
    AND c1 LIKE '%[a-zA-Z0-9 ]%';

    結果:

    +-------+
    | c1    |
    |-------|
    | Music |
    | Café  |
    | 007   |
    | é     |
    | É     |
    | ø     |
    +-------+

    スペースは英数字以外と見なされます。コードを次のように調整することで、スペースを含めることができます。

    SELECT c1 FROM t1
    WHERE c1 NOT LIKE '%[^a-zA-Z0-9 ]%'
    AND c1 LIKE '%[a-zA-Z0-9 ]%';

    結果:

    +--------------+
    | c1           |
    |--------------|
    | Music        |
    | Live Music   |
    | Café         |
    | Café Del Mar |
    | 100 Cafés    |
    | Player 456   |
    | 007          |
    | é            |
    | É            |
    | é 123        |
    | ø            |
    | ø 123        |
    +--------------+

    例3:代替方法

    または、PATINDEX()を使用することもできます 同じ結果を達成するための機能。

    次のコードは、英数字のみを含む行を返します。

    SELECT c1 FROM t1
    WHERE PATINDEX('%[^0-9a-zA-Z ]%', c1) = 0 
    AND PATINDEX('%[a-zA-Z0-9 ]%', c1) > 0;

    結果:

    +-------+
    | c1    |
    |-------|
    | Music |
    | Café  |
    | 007   |
    | é     |
    | É     |
    | ø     |
    +-------+

    スペースあり:

    SELECT c1 FROM t1
    WHERE PATINDEX('%[^0-9a-zA-Z ]%', c1) = 0 
    AND PATINDEX('%[a-zA-Z0-9 ]%', c1) > 0;

    結果:

    +--------------+
    | c1           |
    |--------------|
    | Music        |
    | Live Music   |
    | Café         |
    | Café Del Mar |
    | 100 Cafés    |
    | Player 456   |
    | 007          |
    | é            |
    | É            |
    | é 123        |
    | ø            |
    | ø 123        |
    +--------------+

    1. 文の最後の単語:SQLの場合(正規表現は可能ですか?)

    2. Oracle 12cでは、外部結合を特徴とするクエリの動作が異なります。

    3. 常に暗号化されるSQLServerについて

    4. SQL ServerのCONVERT()