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