서버에 ... 현재 가지고 있는 데이터가... 한... 9백만 넘게 있는데요...
문제는 날짜 부분이 varchar 형 이더군요 ... 아니 테이블 모든 컬럼이 다 varchar ...
그러다 보니 날짜에 1999-01-00 또는 1983 - 00-02 , 1929-01-00 이런식의 날짜가 꽤 되서
날짜를 정리 하려고 합니다.
물론 위의 내용 말고도 다른 경우도 많구요. 일단 오늘은 어떤 황당한 날짜가 있는지 리스트만 쭉 뽑았는데요.
위의 예 처럼 1998 - 01 - 00 은 1998 - 01 - 15로 변경 하고 싶은데요...
어떻게 변경 해야될가요?
하나씩 하기에는 양이 어마어마...
한번엔 않될것을 알기에 순차적으로 작업 을 하려고 하는데요.
년도 만 있는 건 6-28 로 년도 - 월 만 있는건 15일로 통일 년도-00-일자 만 있는건 월을 6으로 통일 하려고 하는데 ...
이거저거 생각해 봐두 방법이 도저히 생각나지 않습니다.
일괄적으로 변경 할 방법이 없을까요?
Comment 3
-
ssunsori
2015.03.16 08:45
-
악마곰
2015.03.16 10:01
편법 이긴 하나 ...
년도, 월 먼저 변경 후 최종적으로 isdate 함수를 활용하면 되지 않을까 생각됩니다...
헌데 이러한 데이터가 insert 되지 않도록 원인 파악하여 해결 함이 우선일듯 합니다...
declare @dtable table(
dt varchar(8)
)
insert @dtable
select '19980100' union all
select '00000201' union all
select '20001301' union all
select '20150303'
-- 1.년도가 날짜가 아닌경우
select * from @dtable
where LEFT(dt, 4) < '1753' or left(dt,4) > '9999'
-- 2.월이 날짜가 아닌경우
select * from @dtable
where SUBSTRING(dt, 5,2) < '01' or SUBSTRING(dt,5,2) > '12'
-- 3.날짜가 아닌경우(1,2항 선행 후)
select * from @dtable
where ISDATE(dt) = 0
-
ssunsori
2015.03.16 10:24
감사합니다. 테스트 해보고 적용 해보겠습니다.
원인은 varchar 형식에다가 수동 으로 날짜를 기입 하다보니 생긴 것 같더군요...
그래서 컬럼을 date 형식으로 다시 주려고 합니다.
그 전에 정리 부터 하고 나서 date 컬럼에 넣을려구요.
근데 .. 하도 날짜가 이리저리 막 ~ 이다보니 .. ㅎㅎ
감사합니다.
이거이거 한번에 안되나 보네요.
하나씩 변경 해야되나보네요 ㅎㅎㅎ
방법이 있을 것 같은데 ...