我有一个名为 day 的字符串列,其星期几的索引如下
1,2,3,4,5,6,7
我要检查列中的字符串中是否存在例如 1。
逻辑应该是这样的。
select * from table where 1 is in day;
如何使用psql实现这一目标?
答案 0 :(得分:2)
select * from table
where position('1' in day) > 0
但是通常,将逗号分隔的项目存储在列中是个坏主意,只会给您带来很多麻烦。
答案 1 :(得分:2)
您不应该首先存储逗号分隔的值。
如果您在这些值中包含两位数字,则使用like
或position()
的解决方案可能会失败。 '12,13'
也会找到position('1' in day)
。
为避免这种情况,请将未归一化的值转换为数组,然后在数组中搜索:
select *
from the_table
where '1' = any(string_to_array(day, ','));
答案 2 :(得分:1)
另一种方法可以尝试使用like
PostgreSQL 9.6模式设置:
CREATE TABLE T(col1 varchar(50));
INSERT INTO T VALUES ('1,2,3,4,5,6,7');
INSERT INTO T VALUES ('2,3,4,5,6,7,1');
INSERT INTO T VALUES ('5,6,7');
查询1 :
select *
from T
WHERE col1 like concat('%','1',',%') or col1 like concat('%,','1','%')
Results :
| col1 |
|---------------|
| 1,2,3,4,5,6,7 |
| 2,3,4,5,6,7,1 |