ORACLE SQL Trim对正则表达式无效

时间:2019-05-08 18:51:26

标签: sql oracle trim regex-negation

澄清

当我简化query时,即

   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'))

我明白了

enter image description here

但是如果我将实际的查询合并到164,000+个不同的行中,则会得到

enter image description here

但是我希望这样(唯一的区别是,创建日期必须具有正确的日期格式,而不是此复杂的字符串)

{{0}}

原始问题

我正在从外部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,'[^ ]+'))仍然给出重复项。

请协助

2 个答案:

答案 0 :(得分:1)

我认为您希望trunc()而不是trim()删除时间部分。

所以尝试:

trunc(i.creationdate)

或者如果您希望日期以特定的字符串表示形式:

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

答案 1 :(得分:1)

尝试to_char:

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