Как извлечь запись из SQl, используя Date в качестве параметра - PullRequest
0 голосов
/ 06 октября 2010

в моей таблице хранится один столбец (smalldatetime).

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

Ex:

10/6 /2010 4:01:00 PM - это фактическое значение в столбце.

И я просто хочу искать записи из таблицы по текущей дате... ???

ALTER  PROCEDURE [dbo].[spDisplayAllOpenPrepaidSales]
@preStatus int,
@preCompanyId int,
@preCounterId int,
@preBillerId int,
 @today  smalldatetime 
AS 
BEGIN
print @today
select * from PrepaidSaleHeader 
where preOpenStatus = @preStatus And preCompanyId = @preCompanyId And 
preCounterId = @preCounterId And preEntryUserId = @preBillerId And preDate > @today
order by preDate
END

И передать параметр вроде;

spDisplayAllOpenPrepaidSales 0,2,4,2,'10/06/2010  00:00:00 AM'

Теперь это возвращает запись, но возвращает мне дату в 24-часовом формате.

Ответы [ 3 ]

1 голос
/ 06 октября 2010

Вы должны использовать формат даты, совместимый с ISO 8601, например,

spDisplayAllOpenPrepaidSales 0,2,4,2,'2010-10-06 00:00:00'

Время должно быть в 24-часовой форме, а не в форме AM / PM, поэтому мое местное время теперь будет '13: 02:00' .Если вы хотите получить все записи за сегодня, поскольку значение даты включает время, все, что выходит за абсолютное начало сегодняшнего дня (00:00:00), на самом деле больше, чем сегодня.Я всегда использую алгоритм, в котором myDate> = сегодня и myDate <завтра, который переводится в: </p>

where preDate >= '2010-10-06' and preDate < '2010-10-07'

Чтобы добиться универсальности с этим, используйте функцию DATEADD ():

where preDate >= @today and preDate < DATEADD(day, 1, @today)
1 голос
/ 06 октября 2010

Функция SQL DateDiff - ваш друг - см. Функция SQL DataDiff

ALTER  PROCEDURE [dbo].[spDisplayAllOpenPrepaidSales]
@preStatus int,
@preCompanyId int,
@preCounterId int,
@preBillerId int,
@today  smalldatetime 
AS 
BEGIN
print @today
select * from PrepaidSaleHeader 
where preOpenStatus = @preStatus And preCompanyId = @preCompanyId And 
preCounterId = @preCounterId And preEntryUserId = @preBillerId 
And DateDiff(d,preDate,@today) = 0 --to find all dates matching the parameter, regardless of the time
order by preDate
END
0 голосов
/ 06 октября 2010

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

Получите день года для столбца и год для столбца и сравните его с днем ​​года для текущей даты и годом для текущей даты (или с любой датой, с которой вы сравниваете).

SELECT * FROM MyTable WHERE DATEPART(dy,MyColumn) = DATEPART(dy,GETDATE()) AND DATEPART(yy,MyColumn) = DATEPART(yy,GETDATE())

Итак, ваша процедура будет выглядеть так:

ALTER  PROCEDURE [dbo].[spDisplayAllOpenPrepaidSales]
@preStatus int,
@preCompanyId int,
@preCounterId int,
@preBillerId int,
 @today  smalldatetime 
AS 
BEGIN
print @today
select * from PrepaidSaleHeader 
where preOpenStatus = @preStatus And preCompanyId = @preCompanyId And 
preCounterId = @preCounterId And preEntryUserId = @preBillerId And DATEPART(dy,preDate) = DATEPART(dy,@today)) AND DATEPART(yy,preDate) = DATEPART(yy,@today)
order by preDate
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...