PostgreSQL 9.3:条件中的isnumeric()

时间:2015-01-27 06:03:16

标签: postgresql plpgsql postgresql-9.3 isnumeric

我需要检查给定文本是否为数字 功能

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

3 个答案:

答案 0 :(得分:3)

您不需要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;

答案 1 :(得分:3)

这将帮助您识别您的字段是否为数字:

^[0-9.]*$

对于小数值,您可以使用^[0-9]*$代替 var obj = [{"name":"Marine Lines","location_id":3},{"name":"Ghatkopar","location_id":2}]; var output = obj.map( function(item){ return item.location_id; }); console.log( output.join(",") )

答案 2 :(得分: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;