Как преобразовать результат даты SQL в британский формат (дд / мм / гггг) - PullRequest
2 голосов
/ 05 июля 2011

Я разработал базовый поиск в ASP / C # для поиска записей в базе данных и предоставил пользователю следующие поля, которые они могут использовать для поиска: слово / фраза, dateFrom, dateTill. Таким образом, введя «Hello, World!», 25.05.2009, 25.06.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 + "'"

Так что все еще довольно просто, и это работает как шарм, когда пользователь вводит даты в американском формате, мм / дд / гггг. Тем не менее, это не удается, когда введена дата в британском формате, например, 25/05/2009. Наконец-то ...

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

... не особо помогает, потому что я не хочу выбирать дату, можно ли использовать подобное утверждение в предложении WHERE?

Спасибо за помощь.

Ответы [ 2 ]

4 голосов
/ 05 июля 2011

Комментарий Хайнци на самом деле не является второстепенным: здесь вам определенно следует использовать параметризованный SQL.Таким образом:

  • Вам не нужно беспокоиться о форматировании полей даты / времени, потому что вы не предоставляете отформатированную версию для базы данных
  • Вы не делаетенужно беспокоиться о внедрении SQL для ваших текстовых полей
  • Вы четко отделяете свой код (SQL) от ваших данных (даты, слова и т. д.)

Вы просто не должнывообще включайте динамические значения в ваш SQL - всегда используйте параметры.См. документацию для SqlCommand.Parameters для примера.

3 голосов
/ 05 июля 2011

Анализ значения, введенного пользователем, в тип данных DateTime с использованием метода DateTime.ParseExact .Этот метод позволяет указать формат даты и времени, поэтому вы можете использовать dd/MM/yyyy или MM/dd/yyyy, в зависимости от предпочтений вашего пользователя.Затем передайте значение DateTime в качестве параметра для вашего оператора SQL.

Вот сообщение в блоге, в котором объясняется

  • , как использовать параметризованные операторы SQL и
  • , почему SQL-пополнение-строки-зло
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...