首页 > 解决方案 > SELECT 语句返回 DATETIME 之外的行

问题描述

我在 SQL Server 中有一个 select 语句,它提取的行数超过了它应有的行数,我不知道为什么。

SELECT
    CONVERT(varchar(50), [EventStamp], 120)
FROM 
    A2ALMDB.dbo.v_AlarmHistory
WHERE 
    EventStamp BETWEEN '2018-08-31 00:00' AND '2018-09-01 00:00'
    AND Area = 'Additives_CLX' OR Area = 'Mixer_CTRLX'
ORDER BY 
    EventStamp DESC

该语句将从我的数据库中返回〜250000行,以挖掘我想要的日期之外的日期,而:

SELECT
    CONVERT(varchar(50), [EventStamp], 120)
FROM 
    A2ALMDB.dbo.v_AlarmHistory
WHERE 
    EventStamp BETWEEN '2018-08-31 00:00' AND '2018-09-01 00:00'
    AND Area = 'Additives_CLX' 
ORDER BY 
    EventStamp DESC

工作正常;我在这里做错了什么?

标签: sql-server

解决方案


尝试使用如下逻辑运行您的第一个查询:

SELECT CONVERT(varchar(50), [EventStamp], 120)
FROM A2ALMDB.dbo.v_AlarmHistory
WHERE EventStamp BETWEEN '2018-08-31 00:00' AND '2018-09-01 00:00' AND
      Area IN ('Additives_CLX', 'Mixer_CTRLX')
ORDER BY EventStamp DESC;

这可能是你想要的。您的查询被解析为:

WHERE (EventStamp BETWEEN '2018-08-31' AND '2018-09-01' AND Area = 'Additives_CLX') OR
      Area = 'Mixer_CTRLX'

因此日期条件仅适用于'Additives_CLX',而不适用于两个值。


推荐阅读