您能解释以下SQL(postgres)代码吗?

时间:2019-11-19 21:16:57

标签: sql postgresql

我要求SO进行查询,以查找表中所有带有“代码”条目的行,其中“代码”条目是搜索字符串的子字符串,其附加条件是它出现在搜索字符串的末尾。

因此,对“ 12345”的查询应返回“ 2345”,“ 345”,“ 45”和“ 5”。

我得到了this answer,它可以工作。我已经阅读了文档,但仍然不了解查询。有人可以解释

SELECT * from yourtable
where '12345' like '%' || Code

2 个答案:

答案 0 :(得分:3)

通常以相反的方式使用LIKE。

例如:

SELECT * FROM SomeTable
WHERE SomeColumn LIKE '%xxx%'  

因此,您检查列是否与带有模式的固定字符串匹配。

但是这个答案的聪明之处在于它却相反。

它将再次检查固定字符串,该固定字符串是根据列创建的模式。

SELECT * FROM SomeTable
WHERE 'bar456' LIKE '%' || SomeColumn;

在此示例中,如果“ SomeColumn”包含值“ 56”?
然后'%' || SomeColumn形成字符串'%56'

因此'bar456'类似于'%56',因为它以'56'结尾
而且'bar456'也类似于'%ar456'

答案 1 :(得分:1)

您需要两个相关的文档链接:

  1. PostgreSQL Pattern Matching'12345' like '%'

  2. PostgreSQL CONCATENATE(||) Operator<match> || Code

SQL的意思是

  1. 从表中获取所有列
  2. IF 列“代码”等于<match> + <value of "code" column>