MAK*_*MAK 4 postgresql plpgsql isnumeric postgresql-9.3
我需要从函数检查给定的文本是否为数字。
创建功能isnumeric():
CREATE OR REPLACE FUNCTION isnumeric(text) RETURNS BOOLEAN AS $$
DECLARE x NUMERIC;
BEGIN
x = $1::NUMERIC;
RETURN TRUE;
EXCEPTION WHEN others THEN
RETURN FALSE;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)
我从中调用该isnumeric()函数的函数:
create or replace function tm(var text)
returns varchar as
$$
begin
if (select isnumeric(var))=t::BOOLEAN then
raise info 'Is numeric value';
else
raise info 'Not numeric';
end if;
end;
$$
language plpgsql;
Run Code Online (Sandbox Code Playgroud)
呼叫functon:
select tm('1');
Run Code Online (Sandbox Code Playgroud)
出现错误:
错误详细信息如下:
ERROR: column "t" does not exist
LINE 1: SELECT (select isnumeric(var))=t::BOOLEAN
Run Code Online (Sandbox Code Playgroud)
您不需要a select(并且实际上是错误的,如错误所示),只需isnumeric直接调用即可。另外,顺便说一句,您的函数缺少一条return语句。
总结一下:
create or replace function tm(var text)
returns varchar as
$$
begin
if (isnumeric(var)) then -- call isnumeric directly
raise info 'Is numeric value';
else
raise info 'Not numeric';
end if;
return '0'; -- missing return value in the OP
end;
$$
language plpgsql;
Run Code Online (Sandbox Code Playgroud)
这将帮助您确定您的字段是否为数字:
select * from Table where field_name ~ '^[0-9]*$'
对于十进制值,您可以^[0-9.]*$ 改用^[0-9]*$
| 归档时间: |
|
| 查看次数: |
10281 次 |
| 最近记录: |