mysql FIND_IN_SET相当于postgresql

时间:2016-02-03 05:47:50

标签: postgresql equivalent find-in-set

select * 
from folder f,uploads u 
where u.id=f.folderId 
and FIND_IN_SET('8', '15,9,13,27')

请告诉我相当于预定义或用户定义的postgresql函数

3 个答案:

答案 0 :(得分:8)

您不应该首先存储逗号分隔值,但您可以执行以下操作:

select * 
from folder f
  join uploads u ON u.id = f.folderId 
where '8' = ANY (string_to_array(some_column,','))

string_to_array()根据传递的分隔符

将字符串转换为实数数组

答案 1 :(得分:0)

    select * 
       from folder f,uploads u 
          where u.id=f.folderId and '8' in('15','9','13','27')

答案 2 :(得分:0)

MySQL中的FIND_IN_SET()函数 - 毫不奇怪 - 适用于集合。 PostgreSQL中的MySQL SET相当于enum type,在实现方面存在一些细微差别。

FIND_IN_SET()函数返回集合中项目的索引,如果集合中不存在,则返回0。这在逻辑上是不合情理的:"a set is an abstract data type that can store certain values, without any particular order, and no repeated values"。 PostgreSQL没有内置的方法来查找enum类型的项目的顺序,它甚至没有办法找出如果字符串也是一个项目enum类型。这就是应该如何。

如果您在较少限制的意义上使用字符串的“集合”,则可能需要为列使用text[]数据类型。假设您只测试数组中是否存在值,那么您的查询就会变为:

SELECT * 
FROM folder f
JOIN uploads u ON u.id = f.folderId 
WHERE '8' = ANY (text_array_column);

如果您想在文本数组列中使用'8'的特定索引,则应在问题中指定要对其执行的操作;使用当前信息,更好的答案是不可能的。