在 Postgres 中将字符串数组转换为整数数组

问题描述 投票:0回答:1

我有一个表示一周中的日子的字符串数组,但我想将其映射到整数数组。

我创建了一个函数来执行此操作,但它总是返回 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] 数组时,我只得到一个空值.

arrays postgresql
1个回答
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;
$$;
© www.soinside.com 2019 - 2024. All rights reserved.