sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man endast returnerar numeriska värden i SQL Server

I SQL Server kan vi använda ISNUMERIC() funktion för att returnera numeriska värden från en kolumn.

Vi kan alternativt köra en separat fråga för att returnera alla värden som innehåller numerisk data.

Exempeldata

Anta att vi skapar en tabell med en varchar kolumn och infoga data enligt följande:

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

Eftersom detta är en varchar kolumnen innehåller den teckendata. Den kan innehålla numerisk data, men den lagras inte som en numerisk typ. Därför kan kolumnen innehålla både textdata och numerisk. Följande exempel kontrollerar den här kolumnen för numeriska värden.

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

Här använde jag ISNUMERIC() funktion tillsammans med Lika med (= ) för att returnera värdena som är numeriska. Funktionen returnerar 1 när det är numeriskt och 0 när det inte är det.

Hitta värden som innehåller siffror

Vi kan använda följande fråga för att returnera alla rader som innehåller numeriska värden (även om de också innehåller andra tecken).

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

Detta är ett annat resultat än det föregående exemplet, eftersom vi helt enkelt letar efter alla värden som innehåller alla numeriska data. I det föregående exemplet letade vi efter de värden som är numeriska.


  1. Följ med mig på PAUG Database Designer Conference

  2. Är SQLFiddle trasig? Fel för Oracle, SQL Server, ...?

  3. Att använda IS NULL eller IS NOT NULL på anslutningsvillkor - Teorifråga

  4. Oracle infoga från välj i tabell med fler kolumner