【发布时间】:2018-10-16 22:12:01
【问题描述】:
我尽量做到具体。
目前我使用的是 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 都相同的查询来做到这一点?
【问题讨论】:
-
你不应该像这样在单个列中存储多个值。
-
"... 两者都相同..." 数据库引擎不使用相同的 sql 方言。所以简短的回答是您使用您使用的那些引擎支持的通用ansi sql级别编写代码,或者您为不同的引擎编写不同的代码。你选。当然,适当地规范化您的表格以避免像您现在遇到的问题。
标签: sql sql-server postgresql database-agnostic