【问题标题】:Compare two dates in c# by passing sql query通过传递sql查询比较c#中的两个日期
【发布时间】:2015-10-09 06:13:04
【问题描述】:

我有一个名为 RETAILTRANSACTIONTABLE 的表,其中有一个名为 BUSINESSDATE 的列,其日期格式为(yyyy-mm-dd) 2015-05-22。

我想将此日期与格式 (dd-mm-yyyy hh:mm:ss) 05-10-2015 12:09:03 的 batch.StartDateTime 进行比较。

var dateAndTime = batch.StartDateTime;
var date = dateAndTime.ToShortDateString();
string query = "SELECT COUNT(discamount) AS DISCOUNTCOUNT "+
                " FROM ax.RETAILTRANSACTIONTABLE where "+
                "(CONVERT(VARCHAR(10),BUSINESSDATE,105) >= '" + date
                + "') and DISCAMOUNT > 0

使用上面的查询给了我列的所有值,我只想要大于或等于批处理日期的值的计数

【问题讨论】:

  • 你应该参数化你的查询。
  • BUSINESSDATE 列的数据类型到底是什么?
  • @FelixPamittan 你能解释一下吗?
  • @Khonsort 数据类型是日期
  • 如果它是日期数据类型,那么所写的表示形式并不重要。这是一个日期(只是让问题不清楚)。

标签: c# sql-server date


【解决方案1】:

你可以使用:

var dateAndTime = batch.StartDateTime;
var date = dateAndTime.ToShortDateString();
string query = "SELECT COUNT(discamount) AS DISCOUNTCOUNT "+
            " FROM ax.RETAILTRANSACTIONTABLE "+
            " WHERE BUSINESSDATE >= CONVERT(DATE, '" + date + "', 105) 
            and DISCAMOUNT > 0 "

另外,如果存在索引,则在BUSINESSDATE 上使用索引。

或者像@FelixPamittan 所说的更好,使用带有绑定的准备好的语句:

var dateAndTime = batch.StartDateTime;
var date = dateAndTime.ToShortDateString();
string query = "SELECT COUNT(discamount) AS DISCOUNTCOUNT "+
            " FROM ax.RETAILTRANSACTIONTABLE "+
            " WHERE BUSINESSDATE >= :theDate 
            and DISCAMOUNT > 0 "

【讨论】:

    【解决方案2】:

    我认为这对你有用

    var dateAndTime = batch.StartDateTime;
    var date = dateAndTime.ToShortDateString();
    string query = "SELECT COUNT(discamount) AS DISCOUNTCOUNT " +
                    " FROM ax.RETAILTRANSACTIONTABLE WHERE" +
                    "BUSINESSDATE > = (CONVERT(VARCHAR, " + @dateParam + " ,105) >= '" + 
                    + "') and DISCAMOUNT > 0
    
    SqlConnection connection = new SqlConnection(/* connection info */);
    SqlCommand command = new SqlCommand(query, connection);
    
    command.Parameters.AddWithValue("dateParam", date.ToString("yyyy/mm/dd"));
    

    【讨论】:

      【解决方案3】:

      在以上答案的帮助下,我对其进行了修改,终于得到了解决方案

      var dateAndTime = batch.StartDateTime;
      var date = dateAndTime.ToString("yyyy-MM-dd");
      string query = "SELECT COUNT(discamount) AS DISCOUNTCOUNT "+
                     " FROM ax.RETAILTRANSACTIONTABLE where "+                    
                     "BUSINESSDATE >= '" + date + "'" + 
                     " and DISCAMOUNT > 0
      

      【讨论】:

      • 最好用格式显式转换。使用CONVERT(DATE, '"+date+"', 120) 而不是'"+date+"'
      • 但是preparedStatement是最好的;-)
      猜你喜欢
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多