所以我有疑问:
SELECT * FROM customer WHERE EXTRACT(YEAR FROM C_BIRTHDATE) < 70 OR EXTRACT(YEAR FROM C_BIRTHDATE) > 79;
我对 SQL 还很陌生。我很难找到为什么这可能不起作用,因为查找起来似乎很简单。
这些是我的结果。如您所见,返回的结果包括 1973 年的条目,但我特别尝试排除 1970-1980 范围内的所有条目(这是测试数据,因此共享它不代表安全问题):
我对 SQL 还很陌生,所以我可能会遗漏一些明显的东西。不过,大约一个小时的研究并没有真正产生结果,所以我认为询问更熟悉该语言的人可能会很有成效。
您的客户正在向您显示 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';