сравнение даты в pl / sql

#sql #oracle #date

#sql #Oracle #Дата

Вопрос:

Я хочу закодировать функцию, которая принимает год в качестве параметра и возвращает человека, родившегося в этом году. Но мой формат таблицы людей, такой как 1993-01-06 00:00:00 итак, как я могу сравнить дату и вернуть отфильтрованного человека в sql?

Комментарии:

1. Каков тип данных этой «даты» в вашей таблице? Если это что-то другое, кроме ДАТЫ, то у вас серьезный сбой в дизайне, который следует исправить. Два человека показали вам, как с этим справиться, если это не ДАТА, но это не следует понимать как одобрение этого дизайна. Если это не ДАТА, то у вас есть нулевая гарантия формата и того, как его интерпретировать.

Ответ №1:

Предполагая, что в вашей таблице есть столбец с DATE типом данных, тогда:

 SELECT *
FROM   table_name
WHERE  date_column >= TO_DATE( :year || '-01-01', 'YYYY-MM-DD' )
AND    date_column <  TO_DATE( ( :year   1 ) || '-01-01', 'YYYY-MM-DD' );
 

(Используйте диапазон дат, а не используйте EXTRACT или TO_CHAR в столбце даты, поскольку это позволяет Oracle использовать индекс в столбце даты.)

Если ваш столбец имеет строковый тип данных с 4-значным годом:

 SELECT *
FROM   table_name
WHERE  string_column LIKE :year || '-%'
 

(Не просто объединяйте % , поскольку, если у вас есть исторические годы, попытка сопоставить год 200 также будет соответствовать году 2000 .)

Ответ №2:

Если тип данных столбца является строкой, то вы можете использовать:

 where col like :year || '%'
 

Если типом данных является дата или временная метка, то вы можете использовать:

 where extract(year from col) = :year