【问题标题】:How to get records between same date in SQL Server如何在 SQL Server 中获取同一日期之间的记录
【发布时间】:2015-09-01 09:42:36
【问题描述】:

当我将“from”和“to”日期定义为相同的值时,查询不会返回任何行。当我为“到”日期选择额外的一天时,将返回行。

string FrmDt = frmtx.Text.Trim();// 9/1/2015
string ToDt = totx.Text.Trim();//9/1/2015

select 
    rn.*,
    (select count(reue) as RequtNo 
     from tblests 
     left join aspne u on r.custorid = u.userid 
     left join aspnethip a on  u.Used=a.UserId
     where 
         u.refere = rn.refid 
         and r.Compy = 'bbb' 
         and create >= '9/1/2015'
         and create <= '9/1/2015') as refcount 
from 
    tbl_reference rn

数据类型:[Createte] [datime] NOT NULL

如何将 9/1/2015 12:00:00 AM 转换为 9/1/2015 11:59:59 PM?

【问题讨论】:

  • 你可以使用createdate = '9/1/2015'
  • 您的日期“2015 年 9 月 1 日”视为 2015 年 9 月 1 日 00:00:00。所以 CreateDate 可能不在 9/1/2015 00:00:00 和 9/1/2015 00:00:00 之间
  • 不知道它是否适用于 sql-server,但使用 MySQL 我发现只需将日期指定为默认为午夜的字符串,因此附加 23:59:59 的时间解决了问题- 或设置下一个日期
  • 我知道这个问题。零时间..如何解决它@RajKamuni
  • 最好使用国际格式的日期:'2015-01-09' (yyyy-mm-dd) 而不是 '9/1/2015',因为您不受本地设置的约束跨度>

标签: c# sql asp.net sql-server


【解决方案1】:

您可以像这样简单地使用它:

 createdate >=  '9/1/2015 00:00:00'and createdate <=  '9/1/2015 23:59:59'

否则你可以切换到第二天并从&lt;=中删除=

createdate >=  '9/1/2015'and createdate <  '9/2/2015'

要为您的日期添加时间,您可以这样尝试:

DateTime frmDt = new DateTime(2015, 09, 01); //time is 00:00:00 by default
DateTime toDt = new DateTime(2015, 09, 01);
TimeSpan toDtTime = TimeSpan.Parse("23:59:59");
DateTime toDtFinal = toDt.Add(ToDtTime);

【讨论】:

  • @krishnamohan:- 你的 createDate 列的格式是什么?
  • [CreateDate] [datetime] NOT NULL,
  • 我们可以在转换日期时间后添加小时数
  • @krishnamohan:- 更新了答案!请立即查看
  • 不能使用 var..im 使用低版本 3.5
【解决方案2】:

由于您的 createdate 字段是日期时间,并且您定义的日期仅说明日期,因此时间默认为 00:00:01。你有三个选择来处理这个问题:

  1. 将范围设置为 2015 年 9 月 1 日 - 2015 年 9 月 2 日,这将选择整个 24 2015 年 9 月 1 日的小时数

  2. 将时间明确设置为分别喜欢 00:00:01 和 23:59:59,如 'YYYY-MM-DD HH:MM:SS'(参见 https://dev.mysql.com/doc/refman/5.7/en/datetime.html 示例)。

  3. 根本不定义范围。只需像这样搜索特定日期的条目:

    ...WHERE DATE(createdate) = '2015-09-01' ...

顺便说一句:在 MySQL 中,您将日期定义为 YYYY-MM-DD,因此您的 '9/1/2015' 实际上应该是 '2015-09-01'。

【讨论】:

  • 我想查看日期之间和一天之间的记录@hubert
  • 我无法使用 mysql,,,sorry
  • 如何将 9/1/2015 12:00:00 AM 转换为 9/1/2015 11:59:59 PM
  • 关于您的确切代码(frmtx 和 totx),您可能需要检查它们是否定义为日期或日期时间。如果您选择解决方案 1,它应该是第一个,如果您选择解决方案 2,它应该是后者。
  • 在 YYYY-MM-DD HH:MM:SS 格式中,您的日期时间为 2015-09-01 23:59:59。请注意不同的日期表示法和欧洲时间表示法(没有 AM 或 PM)。
【解决方案3】:

你也可以这样使用:

声明@tempDate datetime = '2015-09-01' 声明@endDate datetime = DATEADD(SECOND, -1, DATEADD(DAY, 1, @tempDate))

这里@tempDate 是您当前的日期。现在如何计算 @endDate,只需将 1 天添加到 @tempDate,然后从中减去 1 秒,这样您将获得具有最大时间的今天日期。现在您可以简单地编写查询来获取这两个日期之间的日期。

【讨论】:

    【解决方案4】:

    这很好用。将硬编码的日期替换为日期列

    string FrmDt = frmtx.Text.Trim();// 9/1/2015
    string ToDt = totx.Text.Trim();//9/1/2015
    
    select 
        rn.*,
        (select count(reue) as RequtNo 
         from tblests 
         left join aspne u on r.custorid = u.userid 
         left join aspnethip a on  u.Used=a.UserId
         where 
             u.refere = rn.refid 
             and r.Compy = 'bbb' 
            AND (YEAR('9/1/2015')=2015 AND MONTH('9/1/2015')= 9 AND DAY('9/1/2015')=1)
             --and create >= '9/1/2015'
             --and create <= '9/1/2015') as refcount 
    from 
        tbl_reference rn
    

    【讨论】:

      【解决方案5】:

      如果你不想像我一样更改查询,我在 C# 的代码后面添加了这个,

      DateTime from =Convert.ToDateTime(_dataRange[0]);
                  DateTime to =Convert.ToDateTime(_dataRange[1]);
      
                  if (from == to)
                  {
                      to = to.AddHours(23.99); //this gives me 11:59PM in same date
                  }
      

      【讨论】:

        猜你喜欢
        • 2012-10-17
        • 1970-01-01
        • 2019-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多