0

我尽量做到具体。

目前我使用 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 都相同的查询来做到这一点?

4

1 回答 1

3

尝试:

SELECT  Bold_Id, MCurrentStates 
FROM PlanMission 
WHERE MCurrentStates LIKE '%/[planopen/]%' ESCAPE '/';
于 2018-05-07T07:07:04.893 回答