我有一个数据库(更改),我试图在详细信息字段值上创建一个sql报告。问题是细节值显示“短语”,我需要根据这个短语或其中的一部分进行评估。
SQL
SELECT *
FROM change
WHERE change.detail LIKE '%To: [Step Two]%'
我希望它显示详细信息包含“To:[1. Step Two]”的所有值,但结果始终没有返回任何值,其中有表值。以下是详细信息字段的完整值的示例: “[步骤]改变自:[1。第一步]至:[1。第二步]” []中的项目也表示数据库中的其他值
答案 0 :(得分:2)
如果这是Microsoft SQL Server,那么您可以转义括号:
SELECT *
FROM change
WHERE change.detail LIKE '%To: \[Step Two\]%' ESCAPE '\'
括号使用LIKE
子句代表字符范围,因此[Step Two]
匹配To:
之后的字符,即S,t,E,p,w或o。 / p>
您可以在MSDN上阅读此内容。
答案 1 :(得分:0)
假设您使用的是SQL Server / TSQL,那么您遇到的问题是the square bracket characters have a special meaning:
[]指定范围内的任何单个字符([a-f])或设置 ([abcdef])中。
WHERE au_lname LIKE'[C-P] arsen'找到以#结尾的作者姓氏 arsen,从C和P之间的任何单个字符开始,为 例如Carsen,Larsen,Karsen等。在范围搜索中, 包含在范围内的字符可能因排序而异 整理规则。
为了与方括号字符字面匹配,您需要escape them:
LIKE '%To: \[Step Two\]%' ESCAPE '\'
答案 2 :(得分:0)
部分问题是方括号引入了字符常量。这是一个解决方案:
where change.detail like '%To: ___Step Two_%'
这只冒了比赛真正需要方括号的风险。
where change.detail like '%To: __[[]Step Two]%'
另一种方法是逃避这些角色:
where change.detail like '%To: __![Step Two!]%' escape '!'