您好,我正在尝试执行查询以打印在 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/