2010-08-11 4 views
0

Привет всем я хочу найти данные из счетов-фактур и клиента по дате сегодня Я использую GETDATE()Поиск по SQL сервера дате 2005

, например, две таблицы

1 Клиентские

- ID int 
- Name Varcher 

2 Счета-фактуры

- ID int 
- ClientID int 
- date Datetime 
- Total money 

q uery

Select * 
    from client c 
     inner join invoice i on c.id = i.ClientID 
    where i.date = getdate() 

результат

nothing 

, но у меня есть некоторые данные имеют ту же дату сегодня

ответ

1

Попробуйте следующее условие где

WHERE DateDiff(dd, OrderDate, getdate()) = 0 
or 
WHERE Convert(varchar(20), OrderDate, 101) = Convert(varchar(20), getdate(), 101) 

так ваш ответ

Select * 
    from client c 
     inner join invoice i on c.id = i.ClientID 
    WHERE DateDiff(dd, i.date, getdate()) = 0 
+1

не sargable, не будет использовать индекс – SQLMenace

+0

спасибо июня R –

+0

запрос верно, но зачем писать равное 0 Синтаксис DATEDIFF (DatePart, StartDate, EndDate) просьба ответить me –

1

один способ

where i.date >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0), 
and i.date < DATEADD(dd, DATEDIFF(dd, 0, GETDATE())+1 , 0) 
+0

Я все равно удалил свой ответ и добавил +1, потому что, увидев твое, понял, что не буду учитывать возможности будущих дат, но он отлично работает. В плане выполнения используется предикат 'CONVERT_IMPLICIT (datetime, dateiff (день, '1900-01-01 00: 00: 00.000', getdate()), 0)', который в значительной степени зависит от ваших действий. –

0

Попробуйте использовать DATEPART вместо того, чтобы просто GetDate() (который будет соответствовать только даты ТОЧНО):

WHERE DATEPART(dy, GETDATE()) - DATEPART(dy, i.date) <= 1 

Это даст вам все даты в один день ассортимент.

+0

спасибо Джереми –

1

GETDATE() возвращает как дату, так и время.

Нам нужно установить дату до начала сегодняшнего дня.

SELECT * 
FROM client c 
INNER JOIN invoice i 
    ON c.id = i.ClientID 
WHERE i.date >= CAST(FLOOR(CAST(GETDATE() AS float)) AS DATETIME) 
+0

также получит будущие даты – SQLMenace

+0

Просто отлитые в переменную, а затем сделать между: ГДЕ i.date МЕЖДУ @todayDate И @ todayDate + 1 – Simmo

+0

спасибо Simmo –

0

Select * from client c left join invoice i on c.id = i.ClientID where i.date = getdate()

Смежные вопросы