Blog > Komentarze do wpisu
Oracle - IsNumber - sprawdzenie czy wartość jest liczbą

Baza danych Oracle nie posiada własnej funkcji isNumber sprawdzającej czy dana wartość jest wartością liczbową czy też nie. Gdy chcemy to sprawdzić możemy skorzystać z poniższego rozwiązania:

 

/*
   Funkcja zwraca 1 dla liczby i 0 w przeciwnym wypadku,
   jesli value = NULL funkcja zwraca NULL;
*/
CREATE OR REPLACE FUNCTION isNumber (value VARCHAR2)
   RETURN NUMBER
IS
   isNumber   NUMBER := 1; --liczba
BEGIN

   IF value is null then 
      isNumber := NULL;
   ELSE
      IF LENGTH(TRANSLATE (value, ' +-.0123456789', 'X')) > 0 OR 
         LENGTH(TRANSLATE (value, ' +-0123456789', ' ')) > 1 THEN
         isNumber := 0; --nie liczba
      END IF;
   END IF;
   
   RETURN isNumber;
   
END isNumber;
/

 

Wyniki działania ilustruje poniższy przykład:

 

SELECT   isNumber (-10.6),
         isNumber (+8.86),
         isNumber ('1147784'),
         isNumber (' '),
         isNumber ('foo'),
         isNumber (NULL)
  FROM   DUAL;

 

Oracle - IsNumber - sprawdzenie czy wartosc jest liczba

 

Gdy nie możemy utworzyć/skorzystać z powyższej funkcji możemy wykorzystać zaprezentowane podejście w zwykłym zapytaniu. Poniższy przykład wyświetla wszystkie wiersze w tabeli TABLE_NAME, które nie zawierają wartości liczbowych w kolumnie COLUMN_NAME.

 

SELECT   *
  FROM   TABLE_NAME
 WHERE   LENGTH (TRANSLATE (COLUMN_NAME, ' +-.0123456789', ' ')) > 0;
środa, 07 marca 2012, m0rt1m3r
Tagi: Sql oracle plsql

Related Posts Plugin for WordPress, Blogger...

Polecane wpisy

Komentarze
Gość: G.Z., 217.6.199.*
2012/03/12 13:32:54
WOW
genialne!!!!!
wiele razy o tym myslalem ze byloby fajnie miec cos takiego ale nigdy nie mialem wystarczajaco czasu by pomslec jak to zrobic, bo dawalo sie ten brak szybko obejsc ;-)
-
Gość: G.Z., 217.6.199.*
2012/03/12 13:34:06
a po uzyciu nowych funkcji z reg-exp to by sie dalo ten translate/decode zmienic ;-)
-
Gość: m0rt1m3r, *.bu.edu
2012/03/14 20:27:04
Sam nie potrzebowalem wczesniej takiej funkcjonalnosci. Dopiero niedawno, ktos wrzucil mi jakies smieci do tabeli i jeden z raportow przestal dzialac. Ze wzgledu na charakter tabeli (tabela uzywana przez kilka roznych systemow) nie moge uzyc kolumny z typem numerycznym, dlatego musialem szybko ustalic jakie dane mam poprawic.
-
2012/03/22 21:11:44
dzięki za wskazówki
-
Gość: jimmy, 193.104.45.*
2018/02/14 14:20:01
Czy '14.02..1' jest liczbą? Dla takiego łańcucha funkcja zwróci wartość 1
-
2018/02/15 10:07:34
Racja, poprawione :)




PowerBuilder Tetris
D - Tetris



Programowanie iOS

C# ToolBox

SQL / TSQL / PLSQL ToolBox

Linux / Unix ToolBox





Zaprzyjaznione Strony

Sprite Bandits

Cake Time