所以我有一个字符串“09/15/2014”,在c#中它将它转换为日期:
DateTime from = Convert.ToDateTime(fromdate);
这输出“9/15/2014”,当我发送给sql时,我得到了这个:
select convert(varchar, '9/1/2014 12:00:00 AM', 101)
这对我不起作用,因为我需要保留任何前导零。
帮助?
答案 0 :(得分:3)
如果您担心使用Sql Server的日期的字符串格式,那么您做错了。正如对另一个答案的评论所示,SQL Server在内部以机器优化的数字格式存储所有日期,这种格式不易被人类阅读。它只会将它们转换为人类可理解的格式,以便在开发人员工具中输出。
向Sql Server发送日期时,请始终使用查询参数。实际上,在SQL语句中将任何类型的任何数据发送到Sql Server时,始终使用查询参数。其他任何东西不仅会导致格式问题,例如你的问题,而且还会让你发疯,容易受到sql注入攻击。如果您发现自己使用字符串操作将任何类型的数据包含在客户端代码的SQL字符串中,请远离键盘并向真正的程序员询问如何正确执行。如果这听起来很侮辱,那就是因为很难低估这个问题的重要性以及认真对待它的必要性。
从Sql Server检索日期时,大多数情况下您应该只选择datetime字段。让客户端代码担心如何格式化它。你想要领先零吗?大! Sql Datetime列在某些时候在C#中可用作.Net DateTime值,您可以使用DateTime的.ToString()方法或其他格式化选项将值转换为您想要的值,在客户端。
答案 1 :(得分:-3)
SQL查询使用日期和时间格式,如下所示:
2014-09-15
那个年月日。根据下面的评论,这可能会有所不同,具体取决于您对数据库的排序规则(请参阅Scott的评论,以便更准确地描述这种情况并获取此格式的日期)。
DateTime' ToString方法有一个带有格式化字符串的重载。因此,您可以传递要输出字符串的格式。试试这样:
string queryDate = from.ToString("yyyy-MM-dd");
看看你得到了什么。在查询中使用它。
但如果你真的希望这样做,请使用参数。像:
SqlCommand command = new Command(connection, "SELECT * FROM foo WHERE someDate = @date");
command.Parameters.AddWithValue("@date", from);
// where "from" is your DateTime variable from the code you've shown.
这将为您节省DateTime to String转换的麻烦。