Расширитель календаря - PullRequest
1 голос
/ 11 марта 2009

Я использую элемент управления calendarextender в asp.net. Он отображает только дату, а не время. Но при вставке в базу данных время вставляется автоматически. Но при извлечении данных из базы данных, используя дату, в которой не отображаются соответствующие записи. Какие изменения в сохраненной процедуре я могу сделать, чтобы решить эту проблему.

Я использовал следующий код в хранимой процедуре. Имя таблицы - FileM

Select * from FileM Where OldDate = '@OldDate%'

Поле OldDate в databese хранится как datetime, т.е. дата - это дата, которую я вставил, но время - либо 08:00:00:000, либо 00:00:00:000. Так что в приведенном выше запросе приводятся записи для даты, которая идет со временем как 00:00:00:000, но не с 08:00:00:000

Ответы [ 3 ]

2 голосов
/ 11 марта 2009
-- assumes that the @OldDate parameter is a DATETIME
SELECT *
FROM FileM
WHERE DATEDIFF(day, OldDate, @OldDate) = 0

Если вы можете изменить хранимую процедуру, вы можете получить больше гибкости и производительности, передав два параметра DATETIME, указав время начала и окончания нужного диапазона:

CREATE PROCEDURE dbo.GetRangeOfRecords
@StartDateTime DATETIME,
@EndDateTime DATETIME
AS
SELECT *
FROM FileM
WHERE OldDate BETWEEN @StartDateTime AND @EndDateTime

А затем вызвать вашу хранимую процедуру, например, так:

EXEC dbo.GetRangeOfRecords
    @StartDateTime = '2009-02-25 00:00:00.000',
    @EndDateTime = '2009-02-25 23:59:59.999'
0 голосов
/ 11 марта 2009

Поскольку ни одна из ваших дат явно не указана в компоненте времени, все они должны иметь значения по умолчанию 00: 00: 00.000. В этом случае простое сравнение на равенство подойдет. Однако в вашем коде вы помещаете кавычки вокруг своего параметра, что означает, что вы теперь сравниваете свою дату с литеральной строкой "@ OldDate%". Удалите кавычки и посмотрите, поможет ли это.

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

0 голосов
/ 11 марта 2009

Следующий код удалит компонент времени вашего значения даты и времени (под вырезкой я имею в виду сделать его 00:00:00, то есть полночь): -

DateAdd (д, DateDiff (д, 0, MyDateTimeColumn), 0)

так что вы можете использовать: -

Выбрать * из FileM, где dateadd (d, datediff (d, 0, OldDate), 0) = @ OldDate

В качестве альтернативы, если вы используете SQL Server 2008, существует новый тип данных даты (без компонента времени).

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