Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Намерете нечислови стойности в колона в SQL Server

Може да има случаи, когато трябва да проверите колона за нечислови стойности. Например откривате, че колона е varchar колона, когато наистина трябва да е числова колона.

Това се прави лесно в SQL Server с ISNUMERIC() функция.

Примерни данни

Да предположим, че създаваме таблица с varchar колона и вмъкнете данни, както следва:

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;

Резултат:

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

Повечето от горните стойности са числови, въпреки че са в varchar колона. Следните примери проверяват тази колона за нечислови стойности.

ISNUMERIC() Функция

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

Резултат:

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

Тук използвах ISNUMERIC() функция заедно с Не е равно на (<> ) оператор за проверка за стойности, които не са числови.

Може да има основателна причина колоната да бъде varchar вместо числово. Но ако не, стойностите трябва да бъдат преобразувани в техните числови еквиваленти и след това типът данни на колоната трябва да бъде променен на числов тип. Това ще помогне за поддържането на целостта на данните на базата данни.

Намерете стойности, които не съдържат никакви числа

Можем да използваме следната заявка, за да върнем всички редове, които не съдържат числови стойности.

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

Резултат:

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

Това е различен резултат от предишния пример, защото просто търсим всички стойности, които не съдържат всякакви цифрови данни. В предишния пример търсихме тези стойности, които не са числови.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как SESSION_CONTEXT() работи в SQL Server

  2. Защо и кога LEFT JOIN с условие в клауза WHERE не е еквивалентно на същото LEFT JOIN в ON?

  3. Методът SqlDataAdapter.Fill бавен

  4. 4 начина за броене на редове в таблица на SQL Server с плюсове и минуси

  5. Използване на кортежи в SQL IN клауза