如何自定义日期格式

时间:2010-08-05 12:52:28

标签: c# sql-server winforms sql-server-2005

我的一个名为“SetDate”的表格列名为DateTime,其外观如下:

2010-08-02 02:55:58.420

应用程序的DateTime格式如下:

2/11/2010

问题是:

我通过应用程序将SQL查询传递给DB。该查询具有WHERE子句 它将SetDate与来自应用程序的日期进行比较。

SetDate列采用以下格式:2010-08-02 02:55:58.420
从申请传递的日期采用以下格式:3/12/2010

我只需要在没有时间2010-08-023/12/2010的情况下比较两个日期 由于它们的格式不同,我从数据库中找不到任何记录。

我正在使用C#和T-SQL。

有什么想法吗?

5 个答案:

答案 0 :(得分:2)

您是否使用SqlCommand来运行查询?

是?还为您的用户/系统输入使用SqlParameters。

var setDate = DateTime.Now();

using (SqlCommand command = new SqlCommand("SELECT * FROM TableX WHERE SetDate > @SetDate", connection))
{
    // Add new SqlParameter to the command.
    command.Parameters.Add(new SqlParameter("@SetDate", SqlDbType.DateTime, setDate));
    // Read in the SELECT results.
    SqlDataReader reader = command.ExecuteReader();
    //More code
}

答案 1 :(得分:1)

在数据库中DATETIME的WHERE子句中,您需要执行以下操作。 CONVERT(DATETIME,CONVERT(VARCHAR(11),'2010-08-02 02:55:58.420'))

答案 2 :(得分:0)

尝试类似:

SELECT 
   * 
FROM 
   YourTable 
WHERE 
   RTRIM(CONVERT(CHAR(19), SetDate, 101)) = '3/12/2010'

答案 3 :(得分:0)

在Where子句中,您可以使用DateTime类Date的{​​{1}}成员。它返回没有时间的日期。

只要您使用日期对象(.net或SQL服务器),格式无关紧要,因为将字符串解析为对象或反向是您的工作,内部格式无关紧要。

答案 4 :(得分:0)

从代码运行数据库查询的最佳方法是调用存储过程(如果可能)。但是,无论您是否这样做,您都希望使用所需日期初始化的SqlParameter对象。

DateTime dateToCheck = DateTime.Now;
using(SqlCommand cmd //Set Command Here)
{
  cmd.CommandType = SqlCommandType.Procedure;
   //Doing this from memory, but that line should be pretty close
  cmd.Parameters.AddWithValue("@dateToCheck", dateToCheck);

  //Continue with call to DB as normal
}

一个人不在这里,有些人确实在他们的SqlParameter对象上指定了“DateTime”的类型,但我从来没有这样做过,而且它还没有回来咬我。我相信(再次,在这里操作内存)如果你使用的是System。[what]类型,SqlParameter可以自动将它分配给正确的Sql类型。因此传入一个字符串可能仍然会产生一个字符串,但传入一个DateTime将产生一个DateTime。