2016-03-15 14 views
6

Próbuję utworzyć raport, który pobiera zapisy z bazy danych SQL Server, gdzie data dostawy jest dzisiaj.Jak porównać tylko część daty, gdy data dostawy jest dzisiaj

Próbowałem

select * from (tablename) 
where delivery_date = getdate() 

Mimo, że nie dał mi żadnych błędów, to nie dał mi żadnych rekordów albo.

Jestem zakładając, to dlatego, że wszystkie terminy są jak:

2016-03-15 00:00:00.000 

Może muszę skrócić termin do usunięcia czasu i daty, a następnie spróbować?

+0

Możesz rzucić 'getdate()' na 'date' - to skróci czas. Lub użyj zakresu dat, jeśli 'data_darzenia' może zawierać również czas (jeśli tak, to sugerowałbym użycie tego podejścia zamiast przesyłania obu stron do' daty'). –

Odpowiedz

11

Można spróbować kwerendy jak poniżej

select * from (tablename) 
where CAST(delivery_date as date) = CAST(getdate() as date) 

Także jeśli wszystkie terminy dostaw mają część czasu jak 00:00:00.000 na pewno wtedy

select * from (tablename) 
where delivery_date = CAST(getdate() as date) 

będzie działać jako dobry.

+1

Jeśli wszystkie daty dostawy nie mają części czasowej, a następnie rozważ zmianę typu kolumny na DATE, aby zaoszczędzić trochę miejsca. –

+0

DZIĘKUJĘ bardzo Dhruv. Próbowałem tego kodu i działało. Badi Mehrbaani aapki. Jeszcze raz dziękuję. – user1777929

+0

@ user1777929 Twój komentarz sprawił, że mój dzień :) – DhruvJoshi

3

Jeśli delivery_date jest zawsze o północy (00:00:00.000), a następnie porównać je tak:

select * from (tablename) 
where delivery_date = datediff(d, 0, getdate()) 

Korzystanie datediff jak jest to szybki sposób obciąć razem część wartości datetime.

0

Yo należy usunąć część czasu pola data_danych ORAZ wartość GETDATE().

SELECT * 
FROM (tablename) 
WHERE DATEADD(dd, DATEDIFF(dd, 0, delivery_date), 0) = DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0) 
1

Po prostu utworzę 2 paramy. Jeden dla StartTime i jeden dla EndTime i użyj tych w moim zapytaniu.

DECLARE @StartTime DATETIME, 
     @EndTime DATETIME 

SET @StartTime = DATEDIFF(d,0,GETDATE()) 
SET @EndTime = DATEADD(d,1,@StartTime) 

SELECT * 
FROM [tablename] 
WHERE delivery_date >= @StartTime 
     AND delivery_date < @EndTime 
0

Spróbuj tego:

DECLARE @Today DATETIME SET @ today = CONVERT (data, getdate())

select * from (tablename) gdzie delivery_date = @Today

Powiązane problemy