PostgreSQL 9.3:在条件中使用isnumeric()函数

6

我需要检查函数中给定的文本是否为数字。

创建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;

我调用的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;

调用函数:

select tm('1');

出现错误:

以下是错误详细信息:

ERROR:  column "t" does not exist
LINE 1: SELECT (select isnumeric(var))=t::BOOLEAN

1
你应该提到你从这个答案中获取了这个函数:https://dev59.com/_mQo5IYBdhLWcg3wQdet#16206123 - mvp
3个回答

5
你不需要使用 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;

5

这将帮助您确定字段是否为数字:

select * from 表名 where 字段名 ~ '^[0-9]*$'

对于小数值,您可以使用^[0-9.]*$而不是^[0-9]*$


请检查这是否有用? - AKhil N
请检查现在,使用'^[0-9.]*$'。 - AKhil N

0
select getDataType('2021'); == Number
select getDataType('2021-05-12 23:12:10'); == Date
select getDataType('2021-05-12'); == Date
select getDataType('2X'); == String

CREATE 
    OR REPLACE FUNCTION getDataType ( TEXT ) RETURNS TEXT AS $$ DECLARE
    x VARCHAR;
BEGIN
    x = $1 :: NUMERIC;
RETURN 'Number';
EXCEPTION 
WHEN OTHERS THEN
BEGIN
    x = $1 :: DATE;
RETURN 'Date';
EXCEPTION 
WHEN OTHERS THEN
    RETURN 'String';

END;

END; 
$$ STRICT LANGUAGE plpgsql IMMUTABLE;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接