【发布时间】:2017-01-04 00:27:40
【问题描述】:
我有下表记录了员工在公司的出勤情况。
CREATE TABLE EMP_ATNDNC
(
WORK_DAY DATE NOT NULL,
EMP_ID VARCHAR2(20) NOT NULL,
STATUS VARCHAR2(1) DEFAULT '0' NOT NULL,
TMSTMP TIMESTAMP,
RCRD_VER TIMESTAMP NOT NULL,
CONSTRAINT EMP_ATNDNC_PK PRIMARY KEY(WORK_DAY,EMP_ID),
CONSTRAINT EMP_ATNDNC_FK_DAY FOREIGN KEY(WORK_DAY) REFERENCES SCHOOL_OPEN_RCRD(WORK_DAY),
CONSTRAINT EMP_ATNDNC_FK_ID FOREIGN KEY(EMP_ID) REFERENCES EMP_RCRD(EMP_ID)
);
截至目前,已有两条记录:
WORK_DAY EMP_ID STATUS TMSTMP RCRD_VER
29-SEP-16 1234 0 27-AUG-16 05.38.46.022000000 PM 27-AUG-16 05.38.46.022000000 PM
26-AUG-16 9999 0 26-AUG-16 04.50.04.628000000 PM 26-AUG-16 04.50.04.628000000 PM
如果我运行这个查询:
SELECT * FROM EMP_ATNDNC WHERE WORK_DAY BETWEEN TO_DATE('24-AUG-16') AND TO_DATE('30-SEP-16');
我只得到这条记录:
WORK_DAY EMP_ID STATUS TMSTMP RCRD_VER
29-SEP-16 1234 0 27-AUG-16 05.38.46.022000000 PM 27-AUG-16 05.38.46.022000000 PM
如果我运行这个查询:
SELECT * FROM EMP_ATNDNC ORDER BY WORK_DAY ASC;
我得到这个结果:
WORK_DAY EMP_ID STATUS TMSTMP RCRD_VER
29-SEP-16 1234 0 27-AUG-16 05.38.46.022000000 PM 27-AUG-16 05.38.46.022000000 PM
26-AUG-16 9999 0 26-AUG-16 04.50.04.628000000 PM 26-AUG-16 04.50.04.628000000 PM
代替:
WORK_DAY EMP_ID STATUS TMSTMP RCRD_VER
26-AUG-16 9999 0 26-AUG-16 04.50.04.628000000 PM 26-AUG-16 04.50.04.628000000 PM
29-SEP-16 1234 0 27-AUG-16 05.38.46.022000000 PM 27-AUG-16 05.38.46.022000000 PM
为什么会这样?
【问题讨论】:
-
发生这种情况没有任何意义。但是,由于您在评论中写道,您的问题存在拼写错误,这意味着您向我们展示的内容不是您的内容的直接复制粘贴,而是在发布前经过了一些编辑。错误可能在于编辑。魔鬼在细节中。
-
同意上面的@MikeNakis。你这两个问题都没有意义。我能想象的唯一另一种可能性是
work_day上的某种损坏索引 -
@MikeNakis 实际上在发布这个问题之前,我尝试使用 '30-SEP-2016' 和 '30-SEP-16' 来做。
-
你能用
select to_char(work_day, 'SYYYY-MM-DD') from emp_atndnc检查你现有的值吗?看起来世纪是错误的 - 可能是用 YY 面具完成了 0016 年的插入? -
@Gerrat,是的,你是对的。问题是由于损坏的索引。我删除了表并重新创建了它,它适用于我的查询。
标签: sql date oracle11g sql-order-by