【问题标题】:Where clause not working for DATES [duplicate]Where 子句不适用于 DATES [重复]
【发布时间】:2013-01-06 00:21:56
【问题描述】:

可能重复:
Comparing Dates in Oracle SQL

当我处理 DATE 数据类型时,where 子句没有区别。以下代码显示所有 107 行。它应该显示大约 5 行。也没有语法错误。 Where 子句适用于数字、字符等。

    select last_name,hire_date
    from employees
    where hire_date < '01-JAN-90'

【问题讨论】:

  • @ankitaP- 此比较仅在给定文字采用默认日期格式时才有效。对于所有其他格式,我们必须使用 TO_DATE 函数将文字转换为日期

标签: sql oracle10g


【解决方案1】:

试试proper date literal

select last_name,hire_date
from employees
where hire_date < DATE '1990-01-01'

这是一个运行示例:http://sqlfiddle.com/#!4/782c0/1

CREATE TABLE Employees (
  last_name VARCHAR(50),
  hire_date DATE
);

INSERT INTO Employees VALUES ('A', DATE '1985-01-01');
INSERT INTO Employees VALUES ('B', DATE '1986-01-01');
INSERT INTO Employees VALUES ('C', DATE '1987-01-01');
INSERT INTO Employees VALUES ('D', DATE '1988-01-01');
INSERT INTO Employees VALUES ('E', DATE '1989-01-01');
INSERT INTO Employees VALUES ('F', DATE '1990-01-01');
INSERT INTO Employees VALUES ('G', DATE '1991-01-01');
INSERT INTO Employees VALUES ('H', DATE '1992-01-01');
INSERT INTO Employees VALUES ('I', DATE '1993-01-01');
INSERT INTO Employees VALUES ('J', DATE '1994-01-01');
INSERT INTO Employees VALUES ('K', DATE '1995-01-01');
INSERT INTO Employees VALUES ('L', DATE '1996-01-01');
INSERT INTO Employees VALUES ('M', DATE '1997-01-01');
INSERT INTO Employees VALUES ('N', DATE '1998-01-01');


select last_name,hire_date
from employees
where hire_date < DATE '1990-01-01'

【讨论】:

  • 抱歉,这段代码不起作用。
  • @ankitaP 很抱歉,除非我知道您遇到什么问题或您期望什么不同,否则我无法为您提供任何进一步的帮助。我已经发布了用于测试我的答案的代码。
  • 我的 EMPLOYEES 表已经存在,它包含 107 行。我上面写的 SELECT..FROM..WHERE 语句不适用于 DATE,因为它不能隐式进行类型转换。好吧,我得到了 Dazzal 的回答。谢谢你帮助我。干杯!!
【解决方案2】:

永远不要依赖隐式转换。使用:

where hire_date < to_date('01-JAN-1990', 'DD-MON-YYYY')

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2014-08-14
    相关资源
    最近更新 更多