본문 바로가기

programming/Mysql

MySQL 1292: Truncated incorrect DOUBLE value: ' ' 해결

2021.11.30

 

아래와 같이 돌렸을 때에 문제 발생

1292: Truncated incorrect DOUBLE value: '  '

 


UPDATE BP_COMPANY 
SET 
ModDate = '20211130142700'
WHERE CompId IN (SELECT * FROM
                    (SELECT A.CompId
                      FROM BP_COMPANY A
                      RIGHT JOIN(
                                SELECT D.CompId
                                FROM (SELECT D.CompId, COUNT(D.EntryId) AS '총회선수'
                                      FROM BP_PRODENTRY D
                                      WHERE D.UseFlag = 'Y'
                                      GROUP BY D.CompId
                                     ) D
                                LEFT JOIN
                                      (SELECT C.CompId, COUNT(Case When C.ProgState = 4 then 1 When C.ProgState = 5 then 1 end) as '해지해제회선'
                                       FROM BP_PRODENTRY C
                                       WHERE C.UseFlag = 'Y'
                                       GROUP BY C.CompId
                                       ) C
                                ON D.CompId = C.CompId
                                WHERE C.해지해제회선 >= D.총회선수
                                GROUP BY D.CompId
                                ) B
                     ON A.CompId = B.CompId
                     ) bp_comp
                 )

 

 

여러가지 찾았던 방법

 

1) 여전히 오류 발생

지나고 보니 여기서 힌트를 얻을 것을 삽질했다.

SET 칼럼 = CONCAT(칼럼, '값')

 

2) 가령 아래와 같이 처리하는 경우 문제 발생의 원인이 되어

set 칼럼 = '값' and 칼럼2 = '값'

 

이렇게 수정하라는 (and -> ',' (comma) 로 변경) 글을 보았으나

난 이미 첫 쿼리문에 and를 빼고 작성했기 때문에 해당사항 없음

 

SET 칼럼 = '값', 칼럼2 = '값'

 

3) Where 조건의 CompId에 들어가는 값을 임의로 넣어서 돌려보면 이상이 없다. 그럼 update문 문제는 아니라는 것

 

이렇게 해도 정상

 

UPDATE BP_COMPANY 
SET 
ModDate = '20211130000000'
WHERE CompId IN (SELECT 1
                  union
                  SELECT 2
                 )

 

이렇게 해도 정상

UPDATE BP_COMPANY 
SET 
ModDate = '20211130000000'
WHERE CompId IN (1,2,3,4,5
                 )

 

4) 확실한건 IN 뒤에 들어가는 값의 형태가 문제라는 것

SELECT Alians 없애고 다시 수정해봄

 

SELECT * FROM -> SELECT CONCAT(칼럼, ',') FROM

으로 변경해주니 시간은 좀 소요되지만 업데이트 정상 완료

 

UPDATE BP_COMPANY 
SET 
ModDate = '20211130142700'
WHERE CompId IN (SELECT CONCAT(bp_comp.CompId, ',') FROM
                    (SELECT A.CompId
                      FROM BP_COMPANY A
                      RIGHT JOIN(
                                SELECT D.CompId
                                FROM (SELECT D.CompId, COUNT(D.EntryId) AS '총회선수'
                                      FROM BP_PRODENTRY D
                                      WHERE D.UseFlag = 'Y'
                                      GROUP BY D.CompId
                                     ) D
                                LEFT JOIN
                                      (SELECT C.CompId, COUNT(Case When C.ProgState = 4 then 1 When C.ProgState = 5 then 1 end) as '해지해제회선'
                                       FROM BP_PRODENTRY C
                                       WHERE C.UseFlag = 'Y'
                                       GROUP BY C.CompId
                                       ) C
                                ON D.CompId = C.CompId
                                WHERE C.해지해제회선 >= D.총회선수
                                GROUP BY D.CompId
                                ) B
                     ON A.CompId = B.CompId
                     ) bp_comp
                 )

 

 

뭐든 해보고 보면 별거 아닌데 Syntax 문제는 언제나 눈알 빠질 것 같다.