【问题标题】:SQL between date range not as expected日期范围之间的 SQL 与预期不符
【发布时间】:2012-02-19 04:12:41
【问题描述】:

如果我有一个 DateStart = 2012-03-19 00:00:00.000 和一个 DateEnd 2012-03-24 23:59:59.000 那么我试试

SELECT EventGuid,
       Title,
       DESCRIPTION,
       CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, DateStart)))            AS
       DateStart,
       CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, DateEnd))) + '23:59:59' AS DateEnd
       ,
       Address1,
       Address2,
       City,
       PostalCode,
       Country,
       Latitude,
       Longitude,
       SeatCount,
       SeatCost,
       Active,
       DateCreated,
       DATEPART(HH, DateStart)                                        AS
       StartHour,
       LastModified
FROM   Event
WHERE  ( Active = 1 )
       AND ( EventTypeGuid <> '00000000-0000-0000-0000-000000000000' )
       AND ( CONVERT(DATETIME, '3/19/2012') <= DateEnd )
       AND ( CONVERT(DATETIME, '3/19/2012') >= DateStart )
ORDER  BY DateStart  

它不拾取行。

如果我更改为介于语法之间

SELECT EventGuid,
       Title,
       DESCRIPTION,
       CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, DateStart)))            AS
       DateStart,
       CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, DateEnd))) + '23:59:59' AS DateEnd
       ,
       Address1,
       Address2,
       City,
       PostalCode,
       Country,
       Latitude,
       Longitude,
       SeatCount,
       SeatCost,
       Active,
       DateCreated,
       DATEPART(HH, DateStart)                                        AS
       StartHour,
       LastModified
FROM   Event
WHERE  ( Active = 1 )
       AND ( EventTypeGuid <> '00000000-0000-0000-0000-000000000000' )
       AND ( CONVERT(DATETIME, '3/19/2012') BETWEEN DateStart AND DateEnd )
ORDER  BY DateStart  

它也没有得到 3/19 日期

然后我修改为下面的 SQl,DateStart=2012-06-03 23:59:51.000 DateStart2(我需要显示它)2012-06-04 00:00:00.000 和 DateEnd 2012-06-09 23 :59:59.000 但它并没有选择 6/4 日期...

SELECT EventGuid,
       Title,
       DESCRIPTION,
       CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, DateStart))) - '00:00:09' AS
       DateStart,
       CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, DateStart)))              AS
       DateStart2,
       CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, DateEnd))) + '23:59:59'   AS
       DateEnd,
       Address1,
       Address2,
       City,
       PostalCode,
       Country,
       Latitude,
       Longitude,
       SeatCount,
       SeatCost,
       Active,
       DateCreated,
       DATEPART(HH, DateStart)                                          AS
       StartHour,
       LastModified
FROM   Event
WHERE  ( Active = 1 )
       AND ( EventTypeGuid <> '00000000-0000-0000-0000-000000000000' )
       AND ( CONVERT(DATETIME, '6/4/2012') BETWEEN DateStart AND DateEnd )
ORDER  BY DateStart  

【问题讨论】:

  • 你说的是哪个sql数据库?

标签: sql-server-2008 between date-range


【解决方案1】:

在我愿意投入的时间内,我无法解决 SQL 查询问题。

我让我的 Between 选择查询更加慷慨:

BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, DateStart), -1) AND DATEADD(DAY, DATEDIFF(DAY, 0, DateEnd), +1))

然后在我的稳定的 vb.net 代码中处理过滤。

If (e.DayRenderInfo.Date >= dt.Rows(i).Item("DateStart")) And (e.DayRenderInfo.Date <= dt.Rows(i).Item("DateEnd")) Then

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多