오라클

TO_DATE, 형식 정규식 일괄적으로 변환 하기.

사라링 2014. 9. 1. 17:47

프로젝트 서버 이전중에 문제가 발생 했다.

로컬호스트 에서는 문제가 없었으나 . 서버 테스트 과정에서 리터럴 형식이 잘못 되었다는 에러 메세지와 함께

제대로 검색이 되지 않았다.

(수정 : 확인결과 서버에서 받는 문자 형식의 리터럴 방식이 일관 되지 않게 된 경우 발생 함. 따라서 모든 데이터 타입 변경시 

되도록이면 

TO_CHAR(컬럼) , 

TO_DATE(컬럼) 이런식으로 쓸것이 아니라 반드시 그 변환 형식을 남기도록 해야 하며 예를 들자면 'YYYYMMDD'

같은 형식을 넣어야만 한다. )

 

TO_DATE(A.DT_FR)

 

이런 형식을 모두

 

TO_DATE(A.DT_FR,"YYYYMMDD")

 

로 바꾸어야만 한다.

 



F====>       TO_DATE ?\((.+?)\)


R====>      TO_DATE\($1,'YYYYMMDD')

 

이다.

 

예외사항 :     TO_DATE(MIN(VAT_DT)) 과 같은 경우 제한식을 ) 으로 두었기 때문에 수작업 해야 한다. 그냥 바꾸면

TO_DATE(MIN(VAT_DT,'YYYYMMDD')) 라 바뀌게 되는데 이 것은 X

TO_DATE(MIN(VAT_DT),'YYYYMMDD') 로 바꿔야 O . 이는 대도록 정규식을 피해야 할것 같다. 정규식을 좀더 수정 하면 될것도 같긴 한데 일단. ; 걍 수업.


추가 . 

TO_DATE(SYSDATE,'YYYYMMDD') 가 안먹힌다.. 지정된 월이 아니라는 에러 메세지만 배터 낸다. 좀 이해가 안되지만 어쩔수 없이 SYSDATE 에 TO_CHAR 을 적용 했더니 해결 되었다. 

TO_DATE(TO_CAHR(SYSDATE,'YYYYMMDD'),'YYYYMMDD') 로 변경.   



 

추신: 

컬럼 네임에 . 들어 가있는 경우도 있기 때문에 이미 바꿔져 있는 것의 경우 ,가 포함 되어 있다. 따라서 구분을 할수 없음으로

변환을 두번 하게 되면 'YYYYMMDD' 가 추가 되게 되니. 하나씩 find 해서 replace 해야 한다.




추가정규식

검색해 보고 맞는것을 사용토록 해야함 


TO_DATE\(?(.[^\,]+?)\)

TO_DATE($1,'YYYYMMDD')



1번째 --> F(find)

2번째 --> R(replace)


TO_DATE\(?(.[^\,]+?)\)


/



TO_CHARW(?(.[^\,]+?)\)

TO_CHAR($1,'YYYYMMDD')



1번째 --> F(find)

2번째 --> R(replace)