SQL Указание диапазона дат, Явное и МЕЖДУ () - PullRequest
1 голос
/ 22 февраля 2020

Я понимаю SQL, что

WHEN reading_start_dt BETWEEN '2020-02-09' AND '2020-02-15'

- это то же самое, что и

WHEN reading_start_dt >= '2019-02-09' AND reading_start_dt <= '2019-02-15'

Но я получаю совершенно разные ResultSets, когда единственная разница в запросах - это спецификация диапазона дат.
Возвращаются правильные даты, но данные отличаются.
Это происходит как в Teradata, так и в HANA.

Я что-то упустил?

РЕДАКТИРОВАТЬ:


SELECT meter_id, reading_meas, reading_interval_start_dttm FROM "_SYS_BIC"."NGDW.SM.PVT/METER_READING"  
WHERE Reading_Start_Dt BETWEEN '2020-02-09' AND '2020-02-15' AND Service_Channel_num = 1 AND Meter_id = 11870690   
ORDER BY Reading_Interval_Start_Dttm

enter image description here


SELECT meter_id, reading_meas, reading_interval_start_dttm FROM "_SYS_BIC"."NGDW.SM.PVT/METER_READING"  
WHERE reading_start_dt &gt= '2019-02-09' AND reading_start_dt &lt= '2019-02-15' AND service_channel_num = 1 AND meter_id = 11870690  
ORDER BY Reading_Interval_Start_Dttm

enter image description here

КАК УКАЗАНО, ЭТО РЕЗУЛЬТАТ ТИПО В МОЕМ КОДЕ
Я сравнивал что-то в производстве с запрошенным изменением. Спасибо за острые глаза, мои глаза явно слишком устали в субботу, чтобы это увидеть.

Ответы [ 2 ]

3 голосов
/ 23 февраля 2020

Ваши диапазоны дат НЕ одинаковы, независимо от используемого синтаксиса запроса

'2020-02-09' AND '2020-02-15' -- the year is 2020
'2019-02-09' AND '2019-02-15' -- the year here is 2019

Они синтаксически эквивалентны:

WHEN reading_start_dt BETWEEN '2019-02-09' AND '2019-02-15'

WHEN reading_start_dt >= '2019-02-09' AND
     reading_start_dt <= '2019-02-15'

Но самый безопасный метод описания диапазона дат - это используйте комбинацию >= с <, как в:

WHEN reading_start_dt >= '2019-02-09' AND
     reading_start_dt < '2019-02-16' -- note the increase of date here

Этот последний метод работает точно независимо от того, насколько точны данные времени

1 голос
/ 23 февраля 2020

Вернутся правильные даты, но данные отличаются.

Похоже, что данные одинаковы, но наборы результатов имеют другой порядок , Если в вашем запросе нет предложения order by, данные могут быть возвращены в любом порядке.

Эти два фильтра абсолютно одинаковы:

WHEN reading_start_dt BETWEEN '2020-02-09' AND '2020-02-15'

WHEN reading_start_dt >= '2019-02-09' AND
     reading_start_dt <= '2019-02-15'

Однако я бы рекомендовал написать logi c as:

WHEN reading_start_dt >= '2019-02-09' AND
     reading_start_dt < '2019-02-16'

Эта версия работает как для дат, так и для значений даты / времени.

...