Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

3 modi per restituire righe che contengono caratteri alfanumerici in SQL Server

Di seguito sono riportati tre esempi di restituzione di righe che contengono caratteri alfanumerici in SQL Server.

I caratteri alfanumerici sono caratteri alfabetici e numerici.

Dati campione

Supponiamo di avere la seguente tabella:

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;

Risultato:

+----------------------+
| 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                |
+----------------------+

Esempio 1:la riga contiene dati alfanumerici

Il codice seguente restituisce righe che contengono caratteri alfanumerici (e possono contenere anche caratteri non alfanumerici):

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

Risultato:

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

Esempio 2:la riga contiene SOLO dati alfanumerici

Il codice seguente restituisce righe che contengono solo caratteri alfanumerici:

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

Risultato:

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

Gli spazi sono considerati non alfanumerici. Possiamo includere spazi regolando il codice come segue:

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

Risultato:

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

Esempio 3:un metodo alternativo

In alternativa possiamo usare il PATINDEX() funzione per ottenere lo stesso risultato.

Il codice seguente restituisce righe che contengono solo caratteri alfanumerici:

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

Risultato:

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

E con spazi:

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

Risultato:

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