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

Нечислови знаци, които връщат положително при използване на ISNUMERIC() в SQL Server

ISNUMERIC() функцията в SQL Server ви позволява да проверите дали изразът е числов или не.

Въпреки това, може да има моменти, в които получавате резултати, които не сте очаквали. Това може да се случи, ако имате израз, който съдържа знак, който не е число, но все пак се приема от ISNUMERIC() като числови.

Има куп знаци, които ISNUMERIC() приема като числови, които може би не сте смятали за числови. Те включват знаци като плюс (+ ), минус (- ) и различните символи на валута. Също така, в зависимост от неговото разположение, буквата e може също така да позволи целият израз да бъде интерпретиран като числов.

Примери

Ето няколко примера за това, което имам предвид:

SELECT 
  ISNUMERIC('+') AS [+],
  ISNUMERIC('-') AS [-],
  ISNUMERIC('$') AS [$],
  ISNUMERIC('1e2') AS [1e2],
  ISNUMERIC('1e+2') AS [1e+2],
  ISNUMERIC('e') AS [e],
  ISNUMERIC('e+') AS [e+];

Резултат:

+-----+-----+-----+-------+--------+-----+------+
| +   | -   | $   | 1e2   | 1e+2   | e   | e+   |
|-----+-----+-----+-------+--------+-----+------|
| 1   | 1   | 1   | 1     | 1      | 0   | 0    |
+-----+-----+-----+-------+--------+-----+------+

Имайте предвид, че e и e+ връщат отрицателен резултат, когато са сами, но връщат положителен резултат, когато са заобиколени от числа.

Това вероятно е така, защото сами по себе си те не представляват число, но когато са заобиколени от числа, целият израз може да се интерпретира като научна нотация (e и e+ често се използват в научни обозначения).

Числови типове данни

Според документацията на Microsoft, типове данни, които ISNUMERIC() ще разпознае като числово включва следното.

Точни числа

  • голям
  • int
  • smallint
  • tinyint
  • бит

Фиксирана точност

  • десетичен знак
  • числови

Приблизително

  • плава
  • истински

Парични стойности

  • пари
  • малки пари

В допълнение, ISNUMERIC() връща 1 за някои знаци, които не са числа (както се вижда в горния пример). Това включва знаци като плюс (+ ), минус (- ) и валидни валутни символи, като знака за долар ($ ).

Също така, както се вижда в примера, буквата e може да повлияе на резултата, когато е част от по-голям израз и в зависимост от разположението му в този израз.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INSERT INTO срещу SELECT INTO

  2. Анализирайте името на файла и пътя от пълния път

  3. Как да пуснете колона с ограничение в SQL Server

  4. Използвайки T-SQL, върнете n-ти разделен елемент от низ

  5. Как да отпечатате VARCHAR(MAX) с помощта на Print Statement?