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

标签 mysql postgresql

在 MySQL 中,您可以使用 ELT() 函数从列表中的指定位置返回一个项目。

如何在 Postgresql 中找到相同的

--- 在MySQL中

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

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

 Horse  

最佳答案

使用数组:

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.中的函数

关于mysql - Postgresql 中 ELT() 函数的替代方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58618706/

相关文章:

mysql - 搜索、过滤时使用索引的优点

mysql - Flask-SQLAlchemy 查询成本 - Unicode 转换

macos - 通过 boot2docker 挂载卷到 postgres 容器

Postgresql:可变长度用户自定义数据类型存储设置

mysql - 使用 Mysql 以 If Else 条件获取数据

php - 在 PHP、MySql 中生成自定义唯一 ID

mysql - 显示对数据库有任何权限的用户。 MySQL

mysql - mysql2 gem 可以与 Rails 中的 Postgres 数据库一起使用吗

sql - Postgres 选择时间范围前后是否存在另一个事件

postgresql - 将关系数据库转换为图形数据库