1

我有一个数据库(更改),我正在尝试创建一个关于详细字段值的 sql 报告。问题是细节值显示一个“短语”,我需要根据这个短语或它的一部分进行评估。

SQL

SELECT *
FROM change
WHERE change.detail LIKE '%To: [Step Two]%'

我希望它显示详细信息包含“至:[1. 第二步]”的所有值,但结果始终没有返回任何内容,其中有表值。以下是详细信息字段的完整值的示例:“[Step] Changed From: [1. Step One] To: [1. Step Two]” [] 中的项目也代表数据库中的其他值

4

3 回答 3

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。

您可以在MSDN上阅读相关内容。

于 2013-09-06T20:00:01.240 回答
0

假设您使用的是 SQL Server/TSQL,您遇到的问题是方括号字符具有特殊含义:

[ ] 指定范围 ([af]) 或集合 ([abcdef]) 内的任何单个字符。

WHERE au_lname LIKE '[CP]arsen' 查找以 arsen 结尾并以 C 和 P 之间的任何单个字符开头的作者姓氏,例如 Carsen、Larsen、Karsen 等。在范围搜索中,范围中包含的字符可能会根据排序规则的排序规则而有所不同。

为了从字面上匹配方括号字符,您需要对它们进行转义:

LIKE '%To: \[Step Two\]%' ESCAPE '\'
于 2013-09-06T20:06:22.977 回答
0

部分问题是方括号引入了字符常量。这是一种解决方案:

where change.detail like '%To:  ___Step Two_%'

这只是冒着匹配真正需要方括号的风险。

where change.detail like '%To:  __[[]Step Two]%'

另一种方法是转义这些字符:

where change.detail like '%To:  __![Step Two!]%' escape '!'
于 2013-09-06T20:07:45.883 回答