sql - 日期类型的查询 substr 的索引是什么?

标签 sql oracle datetime

您好,我正在尝试执行查询以打印在 ORACLE SQL DEVELOPER 上特定月份执行操作的用户。

这是表格:

CREATE TABLE USUARIO2 (
    CODIGO NUMBER(10) CONSTRAINT USUARIO_PK PRIMARY KEY,
    NOMBRE VARCHAR(50) CONSTRAINT NOM_USUARIO_NN NOT NULL,
    TELEFONO VARCHAR2(12),
    DIRECCION VARCHAR2(100)
);

CREATE TABLE SACA (
    COD_USUARIO NUMBER(10),
    COD_EJEMPLAR NUMBER(10),
    FECHA_PRES DATE DEFAULT SYSDATE,
    FECHA_DEV DATE,
    CONSTRAINT SACA_PK PRIMARY KEY (COD_USUARIO, COD_EJEMPLAR, FECHA_PRES),
    CONSTRAINT USUARIO_FK FOREIGN KEY (COD_USUARIO) REFERENCES USUARIO2(CODIGO) ON DELETE CASCADE,
    CONSTRAINT EJEMPLAR_FK FOREIGN KEY (COD_EJEMPLAR) REFERENCES EJEMPLAR(CODIGO) ON DELETE CASCADE
);

以下是 SACA 的值(value)观:

INSERT INTO SACA VALUES (123,778899, '01-01-2017','02-05-2017');
INSERT INTO SACA VALUES (123,112233, '01-01-2017','02-05-2017');
INSERT INTO SACA VALUES (234,882143,'04-01-2017','04-07-2017');
INSERT INTO SACA VALUES (234,777722,'04-01-2017','04-07-2017');
INSERT INTO SACA VALUES (345,976543, '01-01-2017','02-05-2017');
INSERT INTO SACA VALUES (456,446733,'04-01-2017','04-07-2017');
INSERT INTO SACA VALUES (567,778899, '01-01-2017','02-05-2017');
INSERT INTO SACA VALUES (890,222266,'04-01-2017','04-07-2017');

这就是查询。我想从列 FECHA_DEV 查询在特定月份 (05) 获得一本书的用户。所以这里是查询:

SELECT usuario2.nombre
FROM usuario2
JOIN saca ON usuario2.codigo=saca.cod_usuario WHERE SUBSTR(FECHA_DEV,3,5) IN ('05');

查询为空,但如果更改值,并从第一个和最后一个位置询问它有效。

¿那么 DATE 格式的月份索引是什么?

最佳答案

我假设是 Oracle,因为使用了 number 数据类型和 sysdate 引用。


不要对 DATE 值使用字符串函数。它会在某一时刻失败(例如,在我的计算机上,SUBSTR(sysdate,3,5) 返回 -MAR- 而不是 03)。

最好将月份提取为数字。

因此,要获取 5 月 FECHA_DEV 所在的所有行,您应该使用:

SELECT usuario2.nombre
FROM usuario2
   JOIN saca ON usuario2.codigo=saca.cod_usuario 
WHERE extract(month from FECHA_DEV) = 5;

上面需要这样的索引:

create index idx_fecha_dev_month on SACA  ( extract(month from FECHA_DEV)  );

是否使用索引是一个不同的问题。您必须检查执行计划以验证它。

关于sql - 日期类型的查询 substr 的索引是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60654331/

相关文章:

mysql - 相关视频 数据库表结构

sql - 数据库事务理论

Oracle Developer Tools for visual studio .net 错误

sql - Oracle:查找仅具有空值的列

python - 什么可以使Python的日期列处理更快

python - Pandas 数据框每天重新采样和计数事件

javascript - Sequelize Include On Through 关联

java - 您能否将使用 Java 准备语句通过 jdbc 发送的数据分类为加密数据?

java - 当引用 Java 对象模型中的关联时,为引用分配 null 值背后的相关性是什么?

python - 根据时间对 pandas DataFrame 进行子集化