如何将SQL日期结果转换为英国格式(dd / mm / yyyy)

时间:2011-07-05 09:00:40

标签: c# asp.net sql date

我在ASP / C#中设计了一个基本搜索,用于搜索数据库中的记录,并为用户提供了可用于搜索的字段:word / phrase,dateFrom,dateTill。因此,分别输入“Hello,World!”,05/25 / 2009,06 / 25/2009将搜索内容为“Hello,World!”的数据库记录。这是在给定日期之间创建的。非常简单的东西。

用户输入字段的文本将直接注入SQL语句,如下所示:

SELECT r.idRecord, r.recordText
FROM record r
WHERE LOWER(CAST(r.recordText AS VARCHAR)) LIKE LOWER('%" + word/phrase + "%')
  AND r.creationDate BETWEEN '" + dateFrom + "' AND '" + dateTill + "'"

所以仍然非常简单,当用户以美国格式输入日期时,它就像一个魅力,mm / dd / yyyy。但是,当输入英国格式的日期时,它会失败,如25/05/2009。最后...

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS [DD/MM/YYYY]

...没有特别的帮助,因为我不想选择日期,是否可以在WHERE子句中使用类似的语句?

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

Heinzi的评论根本不是一个侧面说明:你绝对应该在这里使用参数化SQL。那样:

  • 您无需担心日期/时间字段的格式,因为您没有向数据库提供格式化版本
  • 您无需担心文本字段的SQL注入
  • 您将代码(SQL)与数据(日期,单词等)完全分开

您根本不应该在SQL中包含动态值 - 始终使用参数。有关示例,请参阅the documentation for SqlCommand.Parameters

答案 1 :(得分:3)

使用DateTime.ParseExact method将用户输入的值解析为DateTime数据类型。此方法允许您指定日期时间的格式,因此您可以使用dd/MM/yyyyMM/dd/yyyy,具体取决于您的用户偏好。然后将DateTime值作为参数传递给SQL语句。

这是一篇解释

的博客文章
  • 如何使用参数化SQL语句和
  • 为什么SQL-by-string-concatenation是邪恶的:

Coding Horror: Give me parameterized SQL, or give me death

相关问题