簡體   English   中英

ORACLE SQL Trim對正則表達式無效

[英]ORACLE SQL Trim ineffective with Regular Expressions

澄清說明

當我簡化查詢時 ,即

   SELECT TO_CHAR(MIN(I.INCIDENTID))               AS "Incident ID",
          TRIM(TO_CHAR(I.CREATIONDATE,'DD-MON-YYYY'))           AS "Creation Date"    
   FROM   INCIDENT I  
   GROUP BY TRIM(TO_CHAR(I.CREATIONDATE,'DD-MON-YYYY'))

我懂了

在此處輸入圖片說明

但是,如果我在實際查詢中合並了164,000+個不同的行,我將得到

在此處輸入圖片說明

但我希望這樣(唯一的區別是,創建日期必須具有正確的日期格式,而不是此復雜的字符串)

在此處輸入圖片說明

原始問題

我正在從外部Oracle數據庫讀取日期時間,並且已使用TRIM(I.CREATIONDATE)成功地修剪了所有多余的空間。

我已經驗證了這一點,因為我的SQL查詢僅顯示了不同的日期值

但是, TRIM(I.CREATIONDATE)2/26/2019 11:05:44 AM變成26-FEB-19 11.05.43.925000 AM ,但我只想要26-FEB-19

當我將正則表達式僅用於獲取日期時,即REGEXP_SUBSTR(TRIM(I.CREATIONDATE),'[^ ]+') ,它當然會輸出26-FEB-19 ,但是由於我得到重復的日期,所以以某種方式添加了額外的空格。

我已經嘗試了第二次應用TRIM ,即TRIM(REGEXP_SUBSTR(TRIM(I.CREATIONDATE),'[^ ]+')) ,但我仍然得到重復

然后我嘗試先運行正則表達式,然后修剪,但這不起作用,即TRIM(REGEXP_SUBSTR(I.CREATIONDATE,'[^ ]+'))仍然給出重復項。

請協助

我認為您想要trunc() ,而不是trim()來刪除時間分量。

因此,請嘗試:

trunc(i.creationdate)

或者,如果您希望用特定的字符串表示形式的日子:

to_char(i.creationdate, 'YYYY-MM-DD')

嘗試to_char:

trim(to_char(column_name,'dd-mon-yy'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM