我有一个表示一周中的日子的字符串数组,但我想将其映射到整数数组。
我创建了一个函数来执行此操作,但它总是返回 null,我确信我错过了一些明显的东西,但我看不到它。
create or replace function days_textArray_toIntArray(daysArray text[])
returns int[]
language plpgsql
set search_path = ''
as $$
declare
textArray text[];
intArray int[];
begin
if ('Sun' = ANY(textArray)) then
intArray = array_append(intArray,0);
elseif ('Mon' = ANY(textArray)) then
intArray = array_append(intArray,1);
elseif ('Tue' = ANY(textArray)) then
intArray = array_append(intArray,2);
elseif ('Wed' = ANY(textArray)) then
intArray = array_append(intArray,3);
elseif ('Thu' = ANY(textArray)) then
intArray = array_append(intArray,4);
elseif ('Fri' = ANY(textArray)) then
intArray = array_append(intArray,5);
elseif ('Sat' = ANY(textArray)) then
intArray = array_append(intArray,6);
end if;
return intArray;
end;
$$
当我调用它时: select days_textArray_toIntArray('{Wed,Sun}'::text[]) 当我期望获得一个与输入的文本数组相对应的 [3,0] 数组时,我只得到一个空值.
您的函数正在返回
null
,因为您没有为 textArray 变量分配任何值,因此它仍然是一个空数组。因此,if 块内的条件都不会为真,并且它将返回一个空数组。
您可能需要将输入参数
daysArray
分配给函数中的 textArray
。
参考以下代码:
CREATE OR REPLACE FUNCTION days_textArray_toIntArray(daysArray TEXT[])
RETURNS INT[]
LANGUAGE plpgsql
AS $$
DECLARE
textArray TEXT[];
intArray INT[] := '{}'; -- Initialize intArray as an empty array
BEGIN
textArray := daysArray; -- Assign input parameter to textArray
FOR i IN 1..array_length(textArray, 1) LOOP
IF textArray[i] = 'Sun' THEN
intArray := intArray || 0;
ELSIF textArray[i] = 'Mon' THEN
intArray := intArray || 1;
ELSIF textArray[i] = 'Tue' THEN
intArray := intArray || 2;
ELSIF textArray[i] = 'Wed' THEN
intArray := intArray || 3;
ELSIF textArray[i] = 'Thu' THEN
intArray := intArray || 4;
ELSIF textArray[i] = 'Fri' THEN
intArray := intArray || 5;
ELSIF textArray[i] = 'Sat' THEN
intArray := intArray || 6;
END IF;
END LOOP;
RETURN intArray;
END;
$$;