mysql Postgresql中ELT()函数的替代方法是什么?

lf5gs5x2  于 2023-01-25  发布在  Mysql
关注(0)|答案(2)|浏览(158)

在MySQL中,可以使用ELT()函数返回列表中指定位置的项。
如何在Postgresql中找到相同的
---在MySQL中

SELECT ELT(3, 'Cat', 'Dog', 'Horse') AS 'Result';

---结果----------

Horse
ehxuflar

ehxuflar1#

使用数组:

select (array['Cat', 'Dog', 'Horse'])[3];

如果出于兼容性原因需要某个函数:

create or replace function elt(int, variadic text[])
returns text language sql immutable as $$
    select $2[$1]
$$;

select elt(3, 'Cat', 'Dog', 'Horse') AS "Result";

更新。find_in_set()的Postgres等价物(来自评论的@PavelStehule函数的稍微改进版本):

create or replace function find_in_set(text, text)
returns int immutable strict as $$
    select coalesce(array_position(string_to_array($2, ','), $1::text), 0)
$$ language sql;

测试db<>fiddle.中的函数

inkz8wg9

inkz8wg92#

您可能需要在Postgres中使用CASE表达式。

ELT(col, 'Cat', 'Dog', 'Horse')

与:

SELECT
    CASE col WHEN 1 THEN 'Cat'
             WHEN 2 THEN 'Dog'
             WHEN 3 THEN 'Horse' END AS animal
FROM yourTable;

相关问题