【问题标题】:How to Get date between two date and time using MS SQL Query如何使用 MS SQL Query 获取两个日期和时间之间的日期
【发布时间】:2014-10-25 16:30:30
【问题描述】:

我有带列的表 喜欢

----------------------------------------------------
DateFrom   | Dateto     | TimeFrom | TimeTo| ZoneID |
----------------------------------------------------+
2014-09-01 | 2014-09-30 | 03:00    | 08:00 |   1    |
----------------------------------------------------+
2014-09-01 | 2014-09-30 | 09:00    | 15:00 |   1    |  
----------------------------------------------------+
2014-09-01 | 2014-09-30 | 16:00    | 23:00 |   1    |
----------------------------------------------------+
2014-09-01 | 2015-09-30 | 03:00    | 08:00 |   2    |

我想在 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 

【问题讨论】:

  • 你真正想要什么结果?请使用此信息更新问题。
  • 我想获取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 会选择日期时间。)

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

您应该结合DateFromTimeFrom 列值并使用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=....

您没有获得所有记录,因为对于每个符合条件的日期,您只能获得符合单独时间条件(

【讨论】:

    【解决方案2】:

    SELECT * FROM test WHERE CONCAT(datefrom,' ',timefrom)

    您可以使用 CONCAT 使其变得简单

    【讨论】:

      【解决方案3】:

      我希望,如果您使用以下代码结构作为查询的过滤器,它将获取从日期到今天的记录。

      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)...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-07
        • 1970-01-01
        • 2018-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-22
        相关资源
        最近更新 更多