Инструменты пользователя

Инструменты сайта


sql002.javljaetsja_li_stroka_chislom



SQL002. Является ли строка числом

Версии сервера

0.9 1.0 1.5.3 1.5.4 1.5.5 2.0 2.0.3 2.0.4 2.1 2.5 3.0
- - - - - - - - - - -

Описание

Данная хранимя процедура, проверяет, является ли строка, переданная в качестве параметра числом

Пример

CREATE PROCEDURE IS_NUMBER (
  a_value VARCHAR(32)
)RETURNS (
  RESULT VARCHAR(10)
)AS
  DECLARE variable i INTEGER;
  DECLARE variable j INTEGER;
BEGIN
  RESULT = 'Фиг';
  a_value = TRIM(a_value);
  IF (a_value IS NULL OR CHAR_LENGTH(a_value) = 0) THEN BEGIN
    suspend;
    exit;
  END
  i = 1;
  j = CHAR_LENGTH(a_value);
  while (i <= j) do BEGIN
    IF (SUBSTRING(a_value FROM i FOR 1) BETWEEN '0' AND '9'
     OR (i =1 AND SUBSTRING(a_value FROM 1 FOR 1) IN ('-', '+')
       AND CHAR_LENGTH(a_value) > 1 )) THEN
      RESULT = 'Это число';
    ELSE BEGIN
      RESULT = 'Фиг';
      Break;
    END
    i = i + 1;
  END
  suspend;
END

См. также

Источник

2009-01-31irebird\doc\

Обсуждение

Александр Шапошников, 2011/03/05 18:07, 2011/03/06 12:04

А так не проще (пример процедуры является ли целым числом. Но типом можно играть как угодно при приведении)

create or alter procedure IS_INT (
    STRNUM varchar(255))
returns (
    IR integer)
as
declare variable IPINT integer;
begin
    IR=0;
    ipINT=CAST (STRNUM AS INTEGER);
    IR=ipINT;
    SUSPEND;
WHEN ANY DO
    BEGIN
       IR=NULL;
       SUSPEND;
    end
end^
Attid, 2011/03/06 12:07

может и проще. зато первый вариант учит работать со строкой посимвольно. но чем больше вариантов тем лучше, теперь будет выбор =)

Александр Иванов, 2011/03/09 21:05, 2011/03/10 11:58

А можно и так:

CREATE PROCEDURE Istr(Str VARCHAR(255)) RETURNS (Ir FLOAT)
AS
BEGIN
 IF (Str SIMILAR TO '[\+\-]?[0-9]*([0-9].|.[0-9])?[[:DIGIT:]]*' ESCAPE '\') THEN Ir=Str;
SUSPEND;
WHEN ANY DO
 BEGIN
   Ir=NULL;
   SUSPEND;
  END
END;
Ваш комментарий. Вики-синтаксис разрешён:
D Q E E X
 
sql002.javljaetsja_li_stroka_chislom.txt · Последнее изменение: 2009/01/31 16:28 — peaktop