Проблема формата даты SQL в запросе выбора - PullRequest
2 голосов
/ 15 октября 2008

У меня есть страница ASP, которая будет извлекать записи из таблицы БД SQL-сервера. Таблица "order_master" имеет поле с именем order_date. Я хочу создать запрос на выборку для получения даты заказа> даты, введенной пользователем (например, 07/01/2008)

Я пробовал конвертировать и приводить, но оба не работают. Пример данных в столбце order_date: 4/10/2008 20:27:41 PM. На самом деле, я не знаю, какой это тип (varchar / datetime).

Есть ли способ сделать это?

Ответы [ 6 ]

1 голос
/ 15 октября 2008

Дата от 01.07.2008 - это британская / французская аннотация, поэтому все, что вам нужно сделать, это:

SELECT myColumn FROM myTable WHERE myDateField >= convert(datetime, '07/01/2008 00:00:00', 103)

этот код будет получать все строки, где myDateField имеет дату 7 января 2008 года, начиная с 00:00:00 (чч: мм: сс), поэтому первая секунда в этом дне ... простыми словами, весь день ,

для получения дополнительной информации, проверьте Книги онлайн на MSDN

1 голос
/ 15 октября 2008

Сначала я проверю, чтобы тип данных SQL был DateTime или SmallDateTime, а затем проверял бы, что вы передаете значение Date / DateTime со страницы.

Если оба они верны, вам, вероятно, будет лучше последовать совету Джоэла и явно преобразовать оба значения в даты, прежде чем пытаться сравнивать. Кроме того, проверьте точность значений времени, которые вы смотрите; это кажется очевидным, но 01.01.2008 12: 00: 00.00 AM не будет равно 01.01.2008 12: 00: 00.000 AM. Да, я говорю из опыта. : P

0 голосов
/ 16 октября 2008

Вы утверждаете, что не знаете тип поля. Это будет первая проблема, которую нужно решить, выяснить. Вы можете сделать это с помощью: -

SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Order_Master' AND
    COLUMN_NAME = 'Order_Date'

Если это не один из типов даты и времени, его следует преобразовать, если это не ваша ответственность, тогда переходите к кому-то, кто несет ответственность.

Тот факт, что вас беспокоит «формат» даты, указывает на то, что вы, возможно, создаете SQL с использованием конкатенации. Если так, прекратите это делать. Используйте команду с параметром и передайте дату в качестве типа даты.

Теперь ваша проблема заключается в том, как ввести дату на стороне клиента и получить ее в однозначном формате, который можно проанализировать как дату в коде ASP.

Если это не то, что вы решили, добавьте комментарий к этому ответу, и я расширю этот ответ.

0 голосов
/ 15 октября 2008

Помните, что при сравнении дат 10.10.2008 20:27:41 PM не равно 10.10.2008. SQL Server интерпретирует 4/10/2008 как 4/10/2008 12:00:00 AM и выполняет точное сравнение с точностью до секунды. Следовательно, 4/10/2008 МЕНЬШЕ, ЧЕМ 4/10/2008 20:27:41

0 голосов
/ 15 октября 2008

Вы пробовали использовать CONVERT () для обоих значений для типа дата-время?

0 голосов
/ 15 октября 2008

Вы можете создать хранимую процедуру, как это

CREATE PROCEDURE GetOrders
    @OrderDate DATETIME
AS
SELECT
    *
FROM order_master
WHERE Order_Date > @OrderDate

GO

Затем вы можете просто преобразовать введенные пользователем данные в дату, прежде чем вызывать хранимую процедуру через код ASP.

Редактировать

Я только что заметил замечание о типе столбца, вы можете запустить эту команду

sp_help order_master

для получения информации о столбце для поиска типа данных order_date.

...