Как сравнить дату в SQL

Я новичок в базе данных, и я знал, что некоторые люди уже задавали этот вопрос раньше, но мой вопрос немного сложен. Вот она, предположим, у нас есть такая таблица с именем Employee:

Create table People(
ID char(10) PK,
SSN char(15) Not Null,
First_Name char(15),
Last_Name char(15),
Birth_Day date NOT NULL
);

И делаем такие вставки, как:

INSERT INTO People VALUES('0000000001','078-05-1120','George','Brooks', '24-may-85');
INSERT INTO People VALUES('0000000002','917-34-6302','David','Adams', '01-apr-63');
INSERT INTO People VALUES('0000000003','078-05-1123','Yiling','Zhang', '02-feb-66');
INSERT INTO People VALUES('0000000004','078-05-1130','David','Gajos', '10-feb-65');
INSERT INTO People VALUES('0000000005','079-04-1120','Steven','Cox', '11-feb-79');
INSERT INTO People VALUES('0000000006','378-35-1108','Eddie','Gortler', '30-may-76');
INSERT INTO People VALUES('0000000007','278-05-1120','Henry','Kung', '22-may-81');

Итак, у меня вопрос: как мне найти людей, родившихся до 1 января 1980 года. Я просто хочу использовать оператор <или>, но в этом случае он не сработает.

SELECT ID,SSN, First_Name, Last_Name, Birth_Day
FROM People
WHERE Birth_Day < '01-jan-80';

Кто-нибудь может помочь?

Ваш вопрос не имеет смысла. У вас правильный запрос.

Gordon Linoff 16.11.2018 05:17

Привет, JJ E, ваш запрос выглядит правильным. Действительно, здесь правильно использовать оператор <. Можете ли вы публиковать какие-либо сообщения об ошибках, которые вы получаете, или вы просто ищете объяснение, почему это правильно?

wundermahn 16.11.2018 05:20

Оператор <работает одинаково для целых чисел и char? Я думаю это может быть проблема

Raman Mishra 16.11.2018 06:05

Используйте строки для сравнения строк, дат с датами, числа с числом. Здесь Birth_Day имеет тип данных «date», а '01 -Jan-80 '- это строка. выполняя to_date ('01 -Jan-1980 ',' DD-mon-yyyy ') / cast ('01 -jan-1980' as date), вы сравниваете лайк с лайком

George Joseph 16.11.2018 07:38

Пожалуйста, проверьте мой ответ и примите / проголосуйте за него, если он сработал для вас, чтобы он также помог другим искать ответы. Прочтите: stackoverflow.com/help/someone-answers

Kaushik Nayak 19.12.2018 16:41
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
5
52
2

Ответы 2

Вы используете строку даты и полагаетесь на неявное преобразование для сравнения ее с типом даты.

Вместо этого используйте литералы DATE или функцию TO_DATE.

SELECT ID,SSN, First_Name, Last_Name, Birth_Day
FROM People
WHERE Birth_Day < DATE '1980-01-01'

SELECT ID,SSN, First_Name, Last_Name, Birth_Day
FROM People
WHERE Birth_Day < TO_DATE('01-jan-1980','dd-mon-yyyy');

Попробуйте это с to_date:

--this is only for testing
with brth as (
select to_date('24-may-85') as Birth from dual
union
select to_date('24-jan-79') as Birth from dual

) 
-- actual solution
select * from brth where BIRTH < to_date('01-JAN-80')

Другие вопросы по теме