Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Znajdź wartości nieliczbowe w kolumnie w SQL Server

Może się zdarzyć, że trzeba będzie sprawdzić kolumnę pod kątem wartości nieliczbowych. Na przykład odkrywasz, że kolumna jest varchar kolumna, kiedy naprawdę powinna być kolumną liczbową.

Można to łatwo zrobić w SQL Server za pomocą ISNUMERIC() funkcja.

Przykładowe dane

Załóżmy, że tworzymy tabelę z varchar kolumnę i wstawiaj dane w następujący sposób:

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;

Wynik:

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

Większość powyższych wartości to wartości numeryczne, mimo że są one w varchar kolumna. Poniższe przykłady sprawdzają tę kolumnę pod kątem wartości nienumerycznych.

ISNUMERIC() Funkcja

SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;

Wynik:

+-----------+
| c1        |
|-----------|
| a         |
| 9afc      |
| e7        |
| +e0       |
| Ten       |
| 5 Dollars |
+-----------+

Tutaj użyłem ISNUMERIC() funkcja wraz z funkcją Nie równa się (<> ), aby sprawdzić wartości, które nie są numeryczne.

Może istnieć dobry powód, aby kolumna była varchar zamiast liczbowego. Ale jeśli nie, wartości powinny zostać przekonwertowane na ich odpowiedniki liczbowe, a następnie typ danych kolumny powinien zostać zmieniony na typ liczbowy. Pomoże to zachować integralność danych w bazie danych.

Znajdź wartości, które nie zawierają żadnych liczb

Możemy użyć następującego zapytania, aby zwrócić wszystkie wiersze, które nie zawierają wartości liczbowych.

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

Wynik:

+------+
| c1   |
|------|
| a    |
| Ten  |
+------+

To inny wynik niż w poprzednim przykładzie, ponieważ szukamy po prostu wszystkich wartości, które nie zawierają dowolne dane liczbowe. W poprzednim przykładzie szukaliśmy wartości, które nie są liczbowe.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest najlepsza praktyka dotycząca kluczy podstawowych w tabelach?

  2. Jak używać sortowania UTF-8 w bazie danych SQL Server?

  3. Node.js i Microsoft SQL Server

  4. Instrukcja ALTER TABLE kolidowała z ograniczeniem FOREIGN KEY w SQL Server — SQL Sever / TSQL Tutorial, część 69

  5. Jak mogę wstawić dane do SQL Server za pomocą VBNet?