SQL - 同一字段上的多个 Where 条件
Posted
技术标签:
【中文标题】SQL - 同一字段上的多个 Where 条件【英文标题】:SQL - Multiple Where Criteria on same field 【发布时间】:2017-09-28 10:30:38 【问题描述】:我使用 Access MDB 错误日志远程服务设备。使用自定义 Web 浏览器界面,可以再次运行有限的 SQL 查询表 EalInfo。 SQL 字符串必须在一行。
使用下面的代码,我可以选择 ErrNum 包含 S_ 的记录,这很好,因为它排除了许多不需要的记录。
Select
DTime,
ErrNum,
Param1,
Param2,
Controller,
vxwErrNo,
Info,
[TmStamp]/86400 AS DAYS_SinceGantryPwrCycle,
[TmStamp]/3600 AS HOURS,
[TmStamp]/60 AS MINs
from EalInfo
where ErrNum like '%S_%'
order by DTime Desc
但是当我添加额外的过滤器(试图排除两个常见但无用的错误)时,不会返回任何记录。
where ErrNum like '%S_%'
AND ErrNum <> "S_GAFSTARTUPTASK_DTH_BAD_PARAM"
AND ErrNum <> "S_DTH_USER_ALREADY_REGISTERED"
我的 SQL 技能相当薄弱 - 我在 Google 上搜索过并编写了一些脚本 - 但并不快乐。
谢谢
【问题讨论】:
尝试“单引号”而不是“双引号” @RichBenner 。 . . MS Access 对字符串使用双引号。 啊,不知道,谢谢@GordonLinoff 【参考方案1】:在 MS Access 中,like
的通配符是 *
,而不是 %
。所以,我希望您的查询看起来像这样:
where ErrNum like '*S_*' and
ErrNum <> "S_GAFSTARTUPTASK_DTH_BAD_PARAM" and
ErrNum <> "S_DTH_USER_ALREADY_REGISTERED"
我应该注意,所有这些条件都会过滤掉NULL
的值errnum
。如果您期待NULL
,那么您需要明确检查。
您可能应该将<>
逻辑简化为:
where ErrNum like '*S_*' and
ErrNum not in ("S_GAFSTARTUPTASK_DTH_BAD_PARAM", "S_DTH_USER_ALREADY_REGISTERED")
【讨论】:
我想回答这个问题,但做了一些挖掘,发现this page,指出它在某些情况下是有效的(当使用 JET 4 或 JET 的 OLE DB 提供程序时)。这可能是原因,但我不知道为什么第一个查询有效。 感谢您的回复 - 我会尝试您的建议并在这里报告。 LIKE 代码有效,很可能正在使用旧版本的 JET / OLE。【参考方案2】:多年未使用 Access,所以我可能错了,但请尝试:
SELECT
DTime,
ErrNum,
Param1,
Param2,
Controller,
vxwErrNo,
Info,
[TmStamp]/86400 AS DAYS_SinceGantryPwrCycle,
[TmStamp]/3600 AS HOURS,
[TmStamp]/60 AS MINs
FROM
EalInfo
WHERE
ErrNum LIKE '*S_*'
AND ErrNum <> 'S_GAFSTARTUPTASK_DTH_BAD_PARAM'
AND ErrNum <> 'S_DTH_USER_ALREADY_REGISTERED'
ORDER BY
DTime DESC
【讨论】:
【参考方案3】:谢谢所有回答的人。
这是对我有用的代码。
此自定义/受限 SQL 接口要求 SQL 字符串全部位于一行 - 但我已尝试在此处对其进行格式化以提高可读性:
选择
DTime
ErrNum
Param1
Param2
Controller
vxwErrNo
Info
[TmStamp]/86400 AS DAYS_SinceGantryPwrCycle
[TmStamp]/3600 AS HOURS
[TmStamp]/60 AS MINs
来自 EalInfo
在哪里
(ErrNum like '%S_%') AND
(ErrNum not like '%S_GAFSTARTUPTASK%') AND
(ErrNum not like '%S_DTH_USER_ALREADY%')
按 DTime Desc 排序
【讨论】:
以上是关于SQL - 同一字段上的多个 Where 条件的主要内容,如果未能解决你的问题,请参考以下文章
sql 对同一字段进行模糊查询时如何将两个条件写入一个like中