🗓 Будьте осторожны с датами
В этой базе данных все даты сокращены до дня. Это означает, что все значения времени столбца
В зависимости от среды разработки SQL ваши настройки могут скрыть отображение времени. Но то, что время скрыто, не означает, что оно не является частью данных.
В приведенном выше примере я искусственно добавил секунду к пациенту
Еще один распространенный пример, который чаще всего упускают из вида специалисты по работе с данными, — это присоединение к датам, в которых все еще есть временной компонент. В большинстве случаев они действительно пытаются присоединиться к столбцам с сокращенной датой и, в конечном итоге, не получают желаемого результата или, что еще хуже, они не осознают, что получили неправильный результат.
with new_table as (
select
patient_id
, first_name
, last_name
, time(birth_date, '+1 second') as birth_date
from patients
where TRUE
and patient_id = 1
UNION
select
patient_id
, first_name
, last_name
, birth_date
from patients
WHERE TRUE
and patient_id != 1
)
select
birth_date
from new_table
where TRUE
and birth_date between '1953-12-05' and '1953-12-06'
В этой базе данных все даты сокращены до дня. Это означает, что все значения времени столбца
Birthday_date
в этом примере равны 00:00:00
. Однако в реальных наборах данных это обычно не так.В зависимости от среды разработки SQL ваши настройки могут скрыть отображение времени. Но то, что время скрыто, не означает, что оно не является частью данных.
В приведенном выше примере я искусственно добавил секунду к пациенту
№1
. Как видите, этой 1-й секунды было достаточно, чтобы исключить пациента из результатов при использовании ключевого слова BETWEEN
.Еще один распространенный пример, который чаще всего упускают из вида специалисты по работе с данными, — это присоединение к датам, в которых все еще есть временной компонент. В большинстве случаев они действительно пытаются присоединиться к столбцам с сокращенной датой и, в конечном итоге, не получают желаемого результата или, что еще хуже, они не осознают, что получили неправильный результат.