在字符串sql中查找字符

时间:2019-01-23 09:08:12

标签: sql postgresql

我有一个名为 day 的字符串列,其星期几的索引如下

1,2,3,4,5,6,7

我要检查列中的字符串中是否存在例如 1。

逻辑应该是这样的。

select * from table where 1 is in day;

如何使用psql实现这一目标?

3 个答案:

答案 0 :(得分:2)

select * from table
where position('1' in day) > 0

但是通常,将逗号分隔的项目存储在列中是个坏主意,只会给您带来很多麻烦。

答案 1 :(得分:2)

您不应该首先存储逗号分隔的值。

如果您在这些值中包含两位数字,则使用likeposition()的解决方案可能会失败。 '12,13'也会找到position('1' in day)

为避免这种情况,请将未归一化的值转换为数组,然后在数组中搜索:

select * 
from the_table
where '1' = any(string_to_array(day, ','));

在线示例:https://rextester.com/GEMN57014

答案 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 |