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\
Обсуждение
А так не проще (пример процедуры является ли целым числом. Но типом можно играть как угодно при приведении)
может и проще. зато первый вариант учит работать со строкой посимвольно. но чем больше вариантов тем лучше, теперь будет выбор
А можно и так: