【问题标题】:Casting a date time from a datetimePicker从 datetimePicker 投射日期时间
【发布时间】:2014-06-16 21:51:18
【问题描述】:

我有一个 SQL 查询,它应该返回使用两个日期时间选择器选择的两个日期之间的一些数据,但是当两个日期相等时,它应该返回当天的数据。我的查询没有返回任何内容,因为我的日期是mm/dd/yyyy hh:mm:ss AM/PM 格式。我使用日期时间选择器中的以下日期格式

dtpEndDate.Value.ToShortDateString()

例如,当我的结束日期是 2014 年 4 月 13 日时,它会返回 4/13/2014 00:00:00 之前的数据,但我想要直到 4/13/2014 23:59:59 之前的数据

我有以下问题

SELECT   
  sum(isnull(ExpectedAmt, 0)) AS Payment  FROM  Sales                            
  WHERE  (a.SellDate >= @StartDate)  AND (a.SellDate <= @EndDate) 

我尝试转换数据时间,但无法将其转换为日期时间类型。有没有更好的方法可以做到这一点?

【问题讨论】:

    标签: c# sql-server datetimepicker


    【解决方案1】:

    检查日期时间的Date 部分是否相同。如果是这样,请相应地调整值

    if(firstDate.Date.Equals(secondDate.Date))
    {
        firstDate = firstDate.Date; 
             //If any time of day was set, it's now 0:00:00
    
        secondDate = firstDate.AddDays(1).AddSeconds(-1); 
             //This is now the day with time 23:59:59
    }
    

    此时,您可以继续进行常规过滤。

    【讨论】:

    • 如果您想始终获取发生在第二个日期的所有事务,我不会打扰检查是否相等,检查第二个日期是否为 0:00:00,如果是,请执行相同操作addday addseconds 修复
    • @Talspaugh27:这是一个很好的一般提示,但它不在当前问题的范围内,如果我阅读正确的话(我并不总是:))很可能在某个时候或其他,时间部分被切断(因为 OP 似乎正在使用 >= 运算符)。这使我的回答毫无用处,但由于没有具体提及,我不知道:)
    • 我正在处理这一行“例如,当我的结束日期是 2014 年 4 月 13 日时,它会返回 2014 年 4 月 13 日 00:00:00 之前的数据,但我想数据截至 2014 年 4 月 13 日 23:59:59"
    【解决方案2】:

    如果您的 SQL 数据库是 MS SQL Server,您可以使用 DATEDIFF 函数。您的 SQL 失败,因为您的 DateTime 对象都有 0 小时/分钟/秒,而您的表中的数据可能没有。

    DATEDIFF(DAY, date1, date2) &lt;= 0 为真,如果 date1 晚于或等于 date2,忽略小于一天的任何时间单位。

    【讨论】:

      猜你喜欢
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 2020-07-19
      • 1970-01-01
      • 2010-09-10
      相关资源
      最近更新 更多