[20210312]如何取整月日期.txt

lfree發表於2021-03-12

[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部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2762467/,如需轉載,請註明出處,否則將追究法律責任。

相關文章