在带有括号的PostgreSQL中使用LIKE

时间:2018-05-07 06:50:44

标签: sql sql-server postgresql database-agnostic

我尽量做到如此具体。

目前我使用MS SQL Server 2012。

简化表PlanMission包含这些行

|---------------------|---------------------|
|      Bold_Id        |   MCurrentStates    |
|---------------------|---------------------|
|      10776          |[original[scheme]    |
|---------------------|---------------------|
|      10777          |[operative][inproc]  |
|---------------------|---------------------|
|      10778          |[operative][closed]  | 
|---------------------|---------------------|
|      10779          |[operative][planopen]|
|---------------------|---------------------|

Bold_id列只是一个唯一的ID。 MCurrentStates列是一个包含状态作为子字符串的VARCHAR列。

状态只是一个被括号括起来的字符串,如[planopen] 因此,该列可能为空或具有许多状态,如上例所示。

在MS SQL中如果我喜欢这个

SELECT  Bold_Id, MCurrentStates 
FROM PlanMission 
WHERE MCurrentStates LIKE '%[planopen]%'

它不起作用。它只列出了MCurrentStates中非空的所有行。

它由插入[]

解决
SELECT  Bold_Id, MCurrentStates 
FROM PlanMission 
WHERE MCurrentStates LIKE '%[[]planopen]%'

工作正常。

现在我想为PostgreSQL做这个。 简单的解决方案是删除括号。

但我的问题是如何使用MS SQL和PostgreSQL相同的查询来完成此操作?

1 个答案:

答案 0 :(得分:3)

尝试:

SELECT  Bold_Id, MCurrentStates 
FROM PlanMission 
WHERE MCurrentStates LIKE '%/[planopen/]%' ESCAPE '/';