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

Sådan returneres kun numeriske værdier i SQL Server

I SQL Server kan vi bruge ISNUMERIC() funktion til at returnere numeriske værdier fra en kolonne.

Vi kan alternativt køre en separat forespørgsel for at returnere alle værdier, der indeholder numeriske data.

Eksempel på data

Antag, at vi opretter en tabel med en varchar kolonne, og indsæt data som følger:

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
    c1 varchar(255)
);

INSERT INTO t1 (c1) VALUES 
    ('0'),
    ('1'),
    ('+1'),
    ('-1'),
    ('+1'),
    ('00.00'),
    ('73.45'),
    ('+73.45'),
    ('-73.45'),
    ('.246'),
    ('-.34e7'),
    ('12.e-3'),
    ('1.2e+4'),
    ('a'),
    ('9afc'),
    ('e7'),
    ('+e0'),
    ('Ten'),
    ('5 Dollars');

SELECT * FROM t1;

Resultat:

+-----------+
| c1        |
|-----------|
| 0         |
| 1         |
| +1        |
| -1        |
| +1        |
| 00.00     |
| 73.45     |
| +73.45    |
| -73.45    |
| .246      |
| -.34e7    |
| 12.e-3    |
| 1.2e+4    |
| a         |
| 9afc      |
| e7        |
| +e0       |
| Ten       |
| 5 Dollars |
+-----------+

Da dette er en varchar kolonne, den indeholder tegndata. Det kan indeholde numeriske data, men det gemmes ikke som en numerisk type. Derfor kan kolonnen indeholde både tekstdata og numeriske. Følgende eksempler kontrollerer denne kolonne for numeriske værdier.

ISNUMERIC() Funktion

SELECT c1
FROM t1
WHERE ISNUMERIC(c1) = 1;

Resultat:

+--------+
| c1     |
|--------|
| 0      |
| 1      |
| +1     |
| -1     |
| +1     |
| 00.00  |
| 73.45  |
| +73.45 |
| -73.45 |
| .246   |
| -.34e7 |
| 12.e-3 |
| 1.2e+4 |
+--------+

Her brugte jeg ISNUMERIC() funktion sammen med Equal To (= ) operatør for at returnere de værdier, der er numeriske. Funktionen returnerer 1 når det er numerisk og 0 når det ikke er det.

Find værdier, der indeholder tal

Vi kan bruge følgende forespørgsel til at returnere alle rækker, der indeholder numeriske værdier (selvom de også indeholder andre tegn).

SELECT c1
FROM t1 
WHERE c1 LIKE '%[0-9]%';

Resultat:

+-----------+
| c1        |
|-----------|
| 0         |
| 1         |
| +1        |
| -1        |
| +1        |
| 00.00     |
| 73.45     |
| +73.45    |
| -73.45    |
| .246      |
| -.34e7    |
| 12.e-3    |
| 1.2e+4    |
| 9afc      |
| e7        |
| +e0       |
| 5 Dollars |
+-----------+

Dette er et andet resultat end det foregående eksempel, fordi vi simpelthen leder efter alle værdier, der indeholder eventuelle numeriske data. I det foregående eksempel ledte vi efter de værdier, der er numeriske.


  1. MySQL-vælg med CONCAT-tilstand

  2. Forespørg efter PostgreSQL med Npgsql og Entity Framework ved hjælp af unaccent

  3. Old Style Oracle Outer Join-syntaks - Hvorfor skal du finde (+) på højre side af lighedstegnet i en Left Outer join?

  4. IN vs ENHVER operatør i PostgreSQL