sql >> Database >  >> RDS >> Sqlserver

Alleen numerieke waarden retourneren in SQL Server

In SQL Server kunnen we de ISNUMERIC() . gebruiken functie om numerieke waarden uit een kolom te retourneren.

We kunnen ook een aparte query uitvoeren om alle waarden te retourneren die numerieke gegevens bevatten.

Voorbeeldgegevens

Stel dat we een tabel maken met een varchar kolom en voeg de gegevens als volgt in:

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;

Resultaat:

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

Aangezien dit een varchar . is kolom, het bevat tekengegevens. Het kan numerieke gegevens bevatten, maar het wordt niet opgeslagen als een numeriek type. Daarom kan de kolom zowel tekstuele als numerieke gegevens bevatten. De volgende voorbeelden controleren deze kolom op numerieke waarden.

De ISNUMERIC() Functie

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

Resultaat:

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

Hier gebruikte ik de ISNUMERIC() functie samen met de gelijk aan (= ) operator om de waarden te retourneren die numeriek zijn. De functie retourneert 1 wanneer het numeriek is en 0 wanneer dat niet het geval is.

Zoek waarden die getallen bevatten

We kunnen de volgende query gebruiken om alle rijen te retourneren die numerieke waarden bevatten (zelfs als ze ook andere tekens bevatten).

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

Resultaat:

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

Dit is een ander resultaat dan het vorige voorbeeld, omdat we gewoon op zoek zijn naar alle waarden die bevatten eventuele numerieke gegevens. In het vorige voorbeeld waren we op zoek naar die waarden die numeriek zijn.


  1. Ontdekking en classificatie van SQL-gegevens

  2. SQL Server 2017 Stap voor stap installatie -1

  3. Hoe tel je dagen behalve zondag tussen twee datums in Postgres?

  4. Waarom het gebruik van eenheidstests een geweldige investering is in hoogwaardige architectuur