У меня есть страница ASP, которая будет извлекать записи из таблицы базы данных SQL-сервера. В таблице order_master есть поле с именем order_date. Я хочу создать запрос выбора, чтобы получить дату заказа> дату, введенную пользователем (например: 01.07.2008)
Я пробовал использовать convert и cast, но оба не работают. Образец данных в столбце order_date - 10.04.2008 20:27:41. На самом деле я не знаю, что это за тип (varchar / datetime).
Есть ли способ это сделать?
Тип будет иметь значение. Если это datetime в базе данных, вам нужно преобразовать то, что пользователь вводит, в datetime, чтобы сравнение работало. Если это строка, необходимо преобразовать обе. Обратите внимание, что при сравнении реальных значений даты и времени будет учитываться ВРЕМЯ, поэтому, если вы не установите время, будет полночь.
государственный язык, используемый на странице ASP, VBScript / JScript?


Вы можете создать такую хранимую процедуру
CREATE PROCEDURE GetOrders
@OrderDate DATETIME
AS
SELECT
*
FROM order_master
WHERE Order_Date > @OrderDate
GO
Затем вы можете просто преобразовать вводимые пользователем данные в дату перед вызовом хранимой процедуры через свой код ASP.
Редактировать
Я только что заметил замечание о типе столбца, вы можете запустить эту команду
sp_help order_master
чтобы получить информацию о столбце, чтобы найти тип данных order_date.
Вы пробовали преобразовать значения и то и другое в тип datetime с помощью CONVERT ()?
преобразование и кастинг я пробовал. но не удалось! при печати на странице я должен использовать значение базы данных «4/10/2008» с 8:27:41 PM до 4/10/200
Я бы сначала проверил, является ли тип данных SQL DateTime или SmallDateTime, а затем проверю, чтобы убедиться, что вы передаете значение Date / DateTime со страницы.
Если оба значения верны, вам, вероятно, будет лучше последовать совету Джоэла и явно преобразовать оба значения в даты, прежде чем пытаться сравнить. Также проверьте точность значений времени, на которые вы смотрите; это кажется очевидным, но 01.01.2008 12: 00: 00.001 AM не будет равно 01.01.2008 12: 00: 00.000 AM. Да, я говорю по опыту. :П
дата 07/01/2008 - это британская / французская аннотация, поэтому все, что вам нужно сделать, это:
SELECT myColumn FROM myTable WHERE myDateField >= convert(datetime, '07/01/2008 00:00:00', 103)
этот код получит все строки, где myDateField имеет дату 7 января 2008 года, начиная с 00:00:00 (чч: мм: сс), так что первая секунда в этот день ... простыми словами, весь день.
для получения дополнительной информации, проверить книги в Интернете на MSDN
Помните, что при сравнении дат, 10.04.2008 20:27:41 нет равно 10.04.2008. SQL Server интерпретирует 4/10/2008 как означающее 4/10/2008 12:00:00 AM и выполнит сравнение точный с точностью до секунды. Следовательно, 10.04.2008 МЕНЬШЕ, ЧЕМ 10.04.2008 20:27:41
Вы заявляете, что не знаете тип поля. Это будет первая проблема, которую нужно решить, узнайте. Вы можете сделать это с помощью: -
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Order_Master' AND
COLUMN_NAME = 'Order_Date'
Если это не один из типов datetime, он должен быть преобразован, если это не ваша ответственность, обратитесь к тому, кто несет ответственность.
Тот факт, что вас беспокоит «формат» даты, указывает на то, что вы можете строить SQL, используя конкатенацию. Если да, прекратите это делать. Используйте команду с параметром и передайте дату как тип даты.
Теперь ваша проблема заключается в том, как дата вводится на стороне клиента и переводится в однозначный формат, который может быть проанализирован как дата в коде ASP.
Если это не то, что вы решили, добавьте комментарий к этому ответу, и я расширю этот ответ.
Где вы проводите сравнение, в SQL или ASP?