【问题标题】:Data according to date in MSSQLMSSQL 中根据日期的数据
【发布时间】:2016-06-22 04:57:25
【问题描述】:

我有这样的数据

 RID      Region        StartDate                EndDate
944     Canada      2016-01-09 00:00:00.000 2016-01-16 23:59:59.000
955     Canada      2016-01-17 00:00:00.000 2016-01-24 23:59:59.000
981     Canada      2016-02-01 00:00:00.000 2016-02-08 23:59:59.000
996     Canada      2016-02-09 00:00:00.000 2016-02-16 23:59:59.000
1006    Canada      2016-01-25 00:00:00.000 2016-01-31 23:59:59.000
1020    Canada      2016-02-17 00:00:00.000 2016-02-24 23:59:59.000
1030    Canada      2016-02-25 00:00:00.000 2016-02-29 23:59:59.000
1041    Canada      2016-03-01 00:00:00.000 2016-03-08 23:59:59.000
1046    Canada      2016-03-09 00:00:00.000 2016-03-16 23:59:59.000
1062    Canada      2016-03-17 00:00:00.000 2016-03-24 23:59:59.000
1073    Canada      2016-03-24 00:00:00.000 2016-03-31 23:59:59.000
1083    Canada      2016-04-01 00:00:00.000 2016-04-08 23:59:59.000
1105    Canada      2016-04-09 00:00:00.000 2016-04-16 23:59:59.000
1118    Canada      2016-04-17 00:00:00.000 2016-04-24 23:59:59.000
1128    Canada      2016-04-25 00:00:00.000 2016-04-30 23:59:59.000
1164    Canada      2016-05-01 00:00:00.000 2016-05-08 23:59:59.000

现在我尝试选择这样的数据

select * from tab1 where Region='Canada'
and StartDate ='2016-01-09 00:00:00.000'
and EndDate ='2016-01-24 23:59:59.000'

想要的结果是

RID      Region     StartDate                EndDate
944     Canada      2016-01-09 00:00:00.000 2016-01-16 23:59:59.000
955     Canada      2016-01-17 00:00:00.000 2016-01-24 23:59:59.000

但是当我执行这个查询时数据是空的

有什么办法吗?

【问题讨论】:

  • 您希望看到什么?期望的结果是什么?

标签: sql-server sql-server-2008 select


【解决方案1】:

我认为您打算限制在一个日期范围,但实际上您限制在两个时间点。试试这个查询:

SELECT *
FROM tab1
WHERE Region = 'Canada' AND
      StartDate >= '2016-01-09 00:00:00.000' AND
      EndDate <= '2016-01-24 23:59:59.000'

【讨论】:

  • 您的StartDateEndDate 列的类型是什么?
  • 你确定吗?查询应该返回一些记录,我不知道你为什么得到一个空集。
【解决方案2】:

试试这个。

SELECT * 
FROM tab1 
WHERE Region = 'Canada'
    AND StartDate >='2016-01-09 00:00:00.000'
    AND EndDate <='2016-01-24 23:59:59.000'

【讨论】:

    【解决方案3】:

    “中间”必须有效。我试过这个。如果它不起作用,请尝试为这些日期时间列转换函数。

    SELECT *
    FROM tab1
    WHERE Region = 'Canada' AND
    StartDate >= convert(datetime,'2016-01-09 00:00:00.000') AND
    EndDate <= convert(datetime,'2016-01-24 23:59:59.000')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 2012-07-14
      • 2023-03-23
      相关资源
      最近更新 更多