我的一个名为“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-02
和3/12/2010
的情况下比较两个日期
由于它们的格式不同,我从数据库中找不到任何记录。
我正在使用C#和T-SQL。
有什么想法吗?
答案 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。