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
4

3 に答える 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;
于 2015-01-27T06:08:27.553 に答える
5

これは、フィールドが数値かどうかを識別するのに役立ちます。

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

^[0-9.]*$ 代わりに使用できる小数値の場合^[0-9]*$

于 2016-10-14T06:06:02.917 に答える
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;
于 2021-05-12T12:35:49.153 に答える