我是新人。 我有这样一张桌子
table t_student ------------------------------------------ | student_class | student_id | name1 | | 01 | 01 | Thanh1 | | 01 | 02 | Thanh2 | | 01 | 03 | Thanh3 | ------------------------------------------
我按student_class
分组以获取此类视图
view v_student -------------------------------------------------------- | student_id | student_class | name1 | | 01 | 01-02-03 | Thanh1-Thanh2-Thanh3 | --------------------------------------------------------
我的问题是:当我只有视图时,在SQL中选择哪种方式来取回表格?
我在v_student
列中的操作符~* 'Thanh2'
的{{1}}视图中搜索
但是当我使用name1
搜索时,没有搜索结果,
我希望在视图~* '^Thanh2$'
中使用~* '^Thanh2$'
进行搜索时有一个结果,是否可能?
请帮助我,非常感谢你。
修改
查看代码:
v_student
答案 0 :(得分:1)
根据您在上面提供的数据,我不希望您与正则表达式~* '^Thanh2$'
匹配,因为这意味着字符串完全 Thanh2 ,因为^
是起始锚点,$
是结束锚点,并且您的视图显然已将所有三个名称合并为一个字符串。因此,正则表达式不匹配。
相反,~* 'Thanh2'
正在字符串中的任何位置查找该子字符串,因此即使视图中的组合值也匹配。
看起来这个视图正在将组值混合成数组并用破折号将它们连接在一起(不太清楚这种视图的实用程序是什么,但我会假设你发现它在你的场景中很有用)。在这种情况下,可以执行类似这样的操作,将名称值返回到数组中,然后在表格中使用,这将在中有效,当且仅当每个以划线分隔的项目是唯一的时。< / p>
select regexp_split_to_array(name1, E'-')
from v_student;
根据OP的评论进行编辑:
我不是PHP人,但基于implode的文档,您的视图定义主要使用 Postgres 等效 - array_to_string
。< / p>
与此相反 - 爆炸,如果你愿意的话 - 将成为我在答案中所包含的内容regexp_split_to_array
,它可以让你重新获得价值。
由于t_student
存在 - 它在视图定义中被查询 - 为什么不直接查询它?