首页 > 数据库 > Oracle > [20210312]如何取整月日期.txt
[20210312]如何取整月日期.txt
--//今天检查数据库,发现开发写的sql语句如下:
--//sql_id = 24fvg57jhzp6t
SELECT TO_CHAR (XXXXXX_YYY.BJBC_MZZZRS_XH.BEGINTIME, :"SYS_B_0")
,XXXXXX_YYY.BJBC_MZZZRS_XH.DEPT_NAME
,XXXXXX_YYY.BJBC_MZZZRS_XH.DEPT_CODE
,XXXXXX_YYY.BJBC_MZZZRS_XH.DOCTOR_NAME
,XXXXXX_YYY.BJBC_MZZZRS_XH.DOCTOR_CODE
,XXXXXX_YYY.BJBC_MZZZRS_XH.BEGINTIME
FROM XXXXXX_YYY.BJBC_MZZZRS_XH
WHERE TO_CHAR (XXXXXX_YYY.BJBC_MZZZRS_XH.BEGINTIME, :"SYS_B_1") = :"SYS_B_2"
> @bind_cap_awr 24fvg57jhzp6t ''
@bind_cap_awr sql_id [column]
no rows selected
SNAP_ID INSTANCE_NUMBER SQL_ID WAS LAST_CAPTURED NAME POSITION MAX_LENGTH DATATYPE_STRING VALUE_STRING
---------- --------------- ------------- --- ------------------- ---------- -------- ---------- --------------- ------------
52727 1 24fvg57jhzp6t YES 2021-02-01 17:41:12 :SYS_B_1 2 32 VARCHAR2(32) yyyy-mm
1 :SYS_B_2 3 32 VARCHAR2(32) 2021-01
52888 1 24fvg57jhzp6t YES 2021-02-08 10:28:52 :SYS_B_1 2 32 VARCHAR2(32) yyyy-mm
1 :SYS_B_2 3 32 VARCHAR2(32) 2021-01
53297 1 24fvg57jhzp6t YES 2021-02-25 11:41:57 :SYS_B_1 2 32 VARCHAR2(32) yyyy-mm
1 :SYS_B_2 3 32 VARCHAR2(32) 2021-01
53559 1 24fvg57jhzp6t YES 2021-03-08 09:49:39 :SYS_B_1 2 32 VARCHAR2(32) yyyy-mm
1 :SYS_B_2 3 32 VARCHAR2(32) 2021-02
53563 1 24fvg57jhzp6t YES 2021-03-08 13:20:59 :SYS_B_1 2 32 VARCHAR2(32) yyyy-mm
1 :SYS_B_2 3 32 VARCHAR2(32) 2021-02
53568 1 24fvg57jhzp6t YES 2021-03-08 18:13:40 :SYS_B_1 2 32 VARCHAR2(32) yyyy-mm
1 :SYS_B_2 3 32 VARCHAR2(32) 2021-02
12 rows selected.
--//很明显这个是做统计报表的语句,类似的语句1大堆。平时并怎么不执行,实际上面的索引都是存在的。
--//BJBC_MZZZRS_XH 是一个复杂视图。大量的业务时间段跑这样语句,硬件不好自然有点慢是正常的情况。
--//探究如何输入2021-02字符串转换为整月的日期。
SCOTT@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
2.测试:
SCOTT@book> select to_date('2021-02','yyyy-mm') c1 from dual ;
C1
-------------------
2021-02-01 00:00:00
--//月头很好确定,月尾呢
SCOTT@book> select ADD_MONTHS(to_date('2021-02','yyyy-mm'),1) c1 from dual ;
C1
-------------------
2021-03-01 00:00:00
SCOTT@book> select ADD_MONTHS(to_date('2021-12','yyyy-mm'),1) c1 from dual ;
C1
-------------------
2022-01-01 00:00:00
--//不是很简单吗?真心不知道复杂在哪里,真心劝一些开发好好看书,不要这么随着性子写SQL语句。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2762467/ ,如需转载,请注明出处,否则将追究法律责任。