如何使用MS SQL查询在两个日期和时间之间获取日期

如何使用MS SQL查询在两个日期和时间之间获取日期,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一张带列的桌子 像 我想得到datefrom和dateto,timefrom和timeto之间的记录 如果我尝试获取日期2014-10-03,那么它将显示所有记录。请帮助我如何使用sql查询获取特定记录。 提前谢谢 我想得到todate和fromdate之间的记录,timefrom和timeto两者都有 我写的这个问题请查收 SELECT Tariff.TariffZoneID,CAST(TariffDate.TimeFrom AS VARCHAR(32)) A

我有一张带列的桌子 像

我想得到datefrom和dateto,timefrom和timeto之间的记录 如果我尝试获取日期2014-10-03,那么它将显示所有记录。请帮助我如何使用sql查询获取特定记录。 提前谢谢

我想得到todate和fromdate之间的记录,timefrom和timeto两者都有

我写的这个问题请查收

    SELECT       
    Tariff.TariffZoneID,CAST(TariffDate.TimeFrom AS VARCHAR(32)) AS TimeFrom ,CAST(TariffDate.TimeTo AS VARCHAR(32)) AS TimeTo,'2014-09-25 00:00:00.000' AS DateFrom,'2014-09-25 00:00:00.000' AS DateTo,TariffZone.Name,TariffZone.MaximumPrice,
    TariffZone.FactionMinute,Tariff.SequenceNo,tariffdate.weekId,   Tariff.Time,Tariff.IsFaction,Tariff.Amount
FROM 
    TariffDate 
    INNER JOIN TariffZone ON TariffDate.TariffZoneID = TariffZone.TariffZoneID 
    INNER JOIN Tariff ON TariffZone.TariffZoneID = Tariff.TariffZoneID 
    WHERE TariffDate.TariffDateID >= (
            SELECT ISNULL(MAX(tariffdateid), 0) 
            FROM TariffDate 
            where datefrom <= cast('2014-09-25 00:00:00.000' as date) 
            and timeFrom<=cast('05:00:00.0000000' as time) and FacilityID =2 and WeekID= datepart(dw,CAST('2014-09-25 00:00:00.000' AS DATE)) 
            )
    AND
    TariffDate.TariffDateID <= 
    (
        SELECT ISNULL(MIN(tariffdateid) , 0)
        FROM TariffDate 
        WHERE dateto <= CAST('2014-09-25 00:00:00.000' AS DATE) 
        and  timeTo <=CAST('07:00:00.0000000' AS TIME) 
        and FacilityID =2 and WeekID= datepart(dw,CAST('2014-09-25 00:00:00.000' AS DATE))) 
    and Tariff.FacilityID =2 
您应该组合DateFrom和TimeFrom列值,并使用datetime sql类型。 修改SQL条件,如下所示:

  WHERE (CAST(CAST(DateFrom AS DATE) AS DATETIME) + CAST(TimeFrom  AS TIME)) <= '2014-09-25 05:00:00'
        AND FacityID=....

  WHERE (CAST(CAST(DateTo AS DATE) AS DATETIME) + CAST(TimeTo  AS TIME)) <= '2014-09-25 07:00:00'
        AND FacityID=....

您没有获得所有记录,因为对于每个与条件匹配的日期,您只会获得与单独的时间条件匹配的记录SELECT*FROM test WHERE CONCATdatefrom',timefrom我希望,如果您使用下面的代码结构作为查询的过滤器,它将获得fromdate到todate的记录

WHERE (CAST('2014-09-25 00:00:00.000' AS DATE)!>dateto and CAST('2014-09-25 00:00:00.000' AS time) !>timeTo)...
and (CAST('2014-09-25 00:00:00.000' AS DATE)!<datefrom and CAST('2014-09-25 00:00:00.000' AS time) !<timeFrom)...

你到底想要什么样的结果?请使用此信息更新问题。我想获取todate和fromdate之间的记录,totime和FromTime之间的记录不清楚。。。请显示预期结果集。第一眼看到:您的表分别包含日期和时间。这表明我们谈论的不是2014-09-01 03:00到2014-09-30 08:00的时间跨度,而是2014-09-01到2014-09-30每天03:00到08:00的时间跨度。否则dba会选择datetimes。
WHERE (CAST('2014-09-25 00:00:00.000' AS DATE)!>dateto and CAST('2014-09-25 00:00:00.000' AS time) !>timeTo)...
and (CAST('2014-09-25 00:00:00.000' AS DATE)!<datefrom and CAST('2014-09-25 00:00:00.000' AS time) !<timeFrom)...