【问题标题】:PostgreSQL 9.3: isnumeric() in a conditionPostgreSQL 9.3:isnumeric() 条件
【发布时间】:2015-03-25 16:42:36
【问题描述】:

我需要从 功能。

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

【问题讨论】:

标签: postgresql plpgsql postgresql-9.3 isnumeric


【解决方案1】:
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;

【讨论】:

    【解决方案2】:

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

    select * from Table where field_name ~ '^[0-9]*$'

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

    【讨论】:

    • 请检查这是否有用?
    • 请立即检查,使用 '^[0-9.]*$'
    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 2017-04-27
      • 2015-03-26
      • 2015-11-18
      相关资源
      最近更新 更多