使用 EXTRACT YEAR 进行比较不起作用

问题描述 投票:0回答:1

所以我有疑问:

SELECT * FROM customer WHERE EXTRACT(YEAR FROM C_BIRTHDATE) < 70 OR EXTRACT(YEAR FROM C_BIRTHDATE) > 79;

我对 SQL 还很陌生。我很难找到为什么这可能不起作用,因为查找起来似乎很简单。

这些是我的结果。如您所见,返回的结果包括 1973 年的条目,但我特别尝试排除 1970-1980 范围内的所有条目(这是测试数据,因此共享它不代表安全问题):

SQL showing entries from 1973, despite me specifically excluding them in the code.

我对 SQL 还很陌生,所以我可能会遗漏一些明显的东西。不过,大约一个小时的研究并没有真正产生结果,所以我认为询问更熟悉该语言的人可能会很有成效。

sql oracle-database oracle-sqldeveloper
1个回答
1
投票

您的客户正在向您显示 DD-MM-RR 格式的日期。这一年并不是真正的“70”,而是(大概)1970 年。

因此您可能需要使用完整的年份数:

SELECT * FROM customer
WHERE EXTRACT(YEAR FROM C_BIRTHDATE) < 1970
OR EXTRACT(YEAR FROM C_BIRTHDATE) > 1979;

或更简单(并且可能更有效):

SELECT * FROM customer
WHERE C_BIRTHDATE < DATA '1970-01-01'
OR C_BIRTHDATE >= DATE '1980-01-01';
© www.soinside.com 2019 - 2024. All rights reserved.