2008-10-15 2 views
2

У меня есть страница ASP, которая будет извлекать записи из таблицы SQL-сервера SQL. В таблице «order_master» указано поле order_date. Я хочу создать запрос выбора, чтобы выбрать дату заказа> дата, введенная пользователем (например: 07/01/2008)Ошибка формата даты SQL в запросе выбора

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

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

+0

Где вы делаете сравнение в SQL или ASP? – Brettski 2008-10-15 19:03:24

+0

Тип будет иметь значение. Если это время в базе данных, вам необходимо преобразовать то, что пользователь вводит в datetime, поэтому сравнение работает. Если это строка, обе они должны быть преобразованы. Обратите внимание, что реальные сопоставления по времени и времени будут учитывать ВРЕМЯ, поэтому, если вы не установите время, будет полночь. – Nikki9696 2008-10-15 19:08:58

ответ

0

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

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

GO 

Тогда вы можете просто преобразовать входные данные пользователей на сегодняшний день до вызова хранимой процедуры с помощью кода ASP.

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

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

sp_help order_master 

, чтобы получить информацию столбца, чтобы найти тип данных order_date.

0

Вы пробовали CONVERT() 'ing как значения типа datetime?

1

Я бы поставил перед собой, чтобы убедиться, что тип данных SQL - это DateTime или SmallDateTime, а затем я проверил бы, чтобы вы передавали значение Date/DateTime со страницы.

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

1

07/01/2008 дата является британской/французской аннотацией, так что все, что вам нужно сделать, это:

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

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

для получения дополнительной информации, check Books online on MSDN

0

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

0

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

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

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

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

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

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