거신
941
2021-04-23 11:42:47 작성 2021-04-23 11:44:01 수정됨
7
201

sql server에서 데이터 형식 cast 오류가 발생하는 경우가 어떻게 되나요?


제목 그대로의 상황에서 문제가 발생한 값을 찾고 있습니다.

현재 sql server에서 데이터를 조회해서 필요한 형태로 가공해 사용하고 있습니다.

변환 오류가 발생하는 데이터의 형식이 nvarchar이고 필요한 형태가 float이라서 쿼리단에서 cast를 이용해 float으로 변환해 가져오고 있습니다.

에러 로그에도 cast 오류를 출력하고 있으니 저 부분이 문제인 건 파악하고 있는데 해당 문제가 발생한 시점에서 nvarchar의 값 형태가 어떻게 들어오길래 저런 오류가 발생하는지는 파악하지 못하고 있습니다.

상태가 좀 아이러니한 건 주기마다 뿜어내는게 아니라 주기없이 간헐적으로 오류가 발생해서 문제가 되는 시점도 제대로 잡지 못하고 있습니다.

쿼리로 테스트를 해봐도 null을 넣어도, ''나 ' '와 같이 공백으로 테스트해도 0으로 출력해서 어떤 값인지 추측도 힘든 상황입니다. 현재 시스템에서 저 이외의 문자열이 들어오는 경우는 없어서요.

이 경우 말고도 cast 오류가 발생하는 경우가 있나요?

0
  • 답변 7

  • thkmon
    167
    2021-04-23 11:56:57 작성 2021-04-23 11:59:55 수정됨

    공백이나 숫자가 아닌 문자열이 왔다고 밖에 볼 수 없는데요.

    (1) 음수나 (2) 길이가 아주 긴 숫자가 왔다거나 (3) 중간에 공백이 들어간 숫자 (4) 개행문자(역슬래시 r, 역슬래시 n) (5) 탭(역슬래시 t)  (6) 널 문자(역슬래시 0) 등도 체크해보는 것이 좋을 것 같지만, 기본적으로 숫자가 아닌 문자열이 왔을 것 같네요.

    결국에는 오류나는 데이터 값을 직접 눈으로 확인해야할 듯 싶습니다. 확인할 방법은 분명 있을 것이니 추측하기보다 실제 오류가 난 쿼리를 구해보는 쪽으로 접근해보시면 어떨까요.

  • guyv
    1k
    2021-04-23 13:17:01
  • 거신
    941
    2021-04-23 14:15:28 작성 2021-04-23 14:15:37 수정됨

    thkmon 

    답변 감사합니다. 저도 해당하는 값을 직접 찾아서 보고 싶은데 아직 어떻게 해야할지 깜깜해서요.... 말씀하신 케이스랑 방법들을 좀 더 찾아봐야겠네요. 감사합니다.


    guyv

    여기서 사용하는 버전이 sql server 2008이라서 해당 함수가 먹히지 않더라고요. try_cast()가 정답이긴한데 그건 2012부터 사용가능하다고 해서 다른 방법을 강구하고 있습니다. 감사합니다.

  • UDT
    437
    2021-04-23 14:49:57

    쿼리단에서 캐스팅 해줘도 데이터를 담을때 변환이 될수도 있습니다. 

    result set 부분을 확인해보세요

  • 거신
    941
    2021-04-23 16:55:57

    UDT 

    저 오류가 발생하니 쿼리 실행이 중단되고 더 이상 진행이 안되던데 그래도 가능한건가요? Result Set 까지 안 가는거 같아서요.

  • guyv
    1k
    2021-04-24 01:44:33
  • 거신
    941
    2021-04-26 09:37:20

    guyv 

    이 방법 사용해 보겠습니다. 답변 감사합니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.