문자형을 숫자형으로 변환하기- TO_NUMBER Show 먼저, Oracle 에서 TO_NUMBER 함수를 사용하지 않아도 문자를 숫자로 인식하고 계산해줍니다. 이것은 Oracle의 특징인데, 데이터 형을 자동으로 변환해주어 상수인지 문자열인지 알아서 구분해준다는 것이죠! 이를 묵시적, 혹은 자동 형 변환이라고 합니다. 결과가 똑같은 것을 확인할 수 있습니다. 하지만 이는 Oracle 에 적용되는 것이고 다른 DB나 언어에서는 적용이 안될 수 있다는 것! 참고해주세요~ 참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정 [DB-오라클] - 문자와 숫자간의 연산에 대한 고찰작성자자바짱|작성시간05.07.27|조회수1,371 목록 댓글 0 글자크기 작게가 글자크기 크게가오라클에서의 문자와 숫자연산에 대한 고찰 다음검색 현재 게시글 추가 기능 열기
댓글
‘D_F6pVu.F1sVw0’ 포함된 새글이 등록될 때 알림 받기 1. 저장소 위치 github.com/GiblesDeepMind/deepsql GiblesDeepMind/deepsql Contribute to GiblesDeepMind/deepsql development by creating an account on GitHub. github.com 본 프로젝트에 사용하는 간단한.. gibles-deepmind.tistory.com 글의 목표1. 문자열 데이터를 숫자열로 바꿔봅시다. 1. 문자열 숫자열 변환
숫자가 아닌 형태의 문자열 중에 공백만 있는 샘플 테이블을 생성했다.
자 이제 문자열을 숫자형으로 바꿔보자.변환은 두 가지 형태로 가능하다. 하나는 int, 다른 하나는 bigint이다. big이 "크다"라는 뜻인것처럼 bigint는 int보다 더 큰 크기의 숫자를 저장할 수 있다. 일련번호 처럼 자릿수가 큰 숫자는 bigint로 저장한다. 여기서는 간단하게 int로 변환해볼 것이다.
위와 같이 세 가지 방식으로 숫자형 변환이 가능하다. 사실, 굳이 형변환을 안하고 공백만 대체해줘도 된다. 왜 이렇게 쉽게 변환이 될까? 왜냐하면, MSSQL에서는 '' 공백과 NULL을 구분하기 때문이다. 공백은 그 자체로 하나의 값을 가지며 공백을 숫자형으로 변환하면 0이 된다.
몇 칸이든 상관없다. 공백을 숫자형으로 변환하면 0이 된다. 즉, 데이터에 '' 공백 외에 다른 문자열이 존재하지 않을 경우 이 데이터를 숫자형으로 변환하는 건 매우 간단한 일이다. 2. 문자열을 숫자열로 바꾸면서 발생할 수 있는 문제점
위와 같이 공백 외에 다른 문자열이 있는 샘플 데이터를 만들었다. 에러 두두등장아까와 같은 방식으로 변환하려고 하니 에러가 나온다(bigint인지 int인지는 무관). 왜냐하면, "칼퇴"라는 문자열이 있기 때문이다.
3. 해결책
ISNUMERIC은 숫자인지를 체크하는 함수이다. 값이 숫자이면 1, 문자열이면 0을 반환한다.
보시다시피 칼퇴와 공백을 모두 0으로 반환했다. 자 기가막힌 아이디어가 떠오르지 않는가? ISNUMERIC을 써서 0인 값만 체크를 해서 그것만 0으로 변환하면? 되지 않을까? 한번 해보자.
짠, 아주 예쁘게 문자열들이 숫자로 변환된 것을 알 수 있다. REFERENCEstackoverflow.com/questions/37478423/cast-convert-empty-string-to-int-in-sql-server
CAST/CONVERT empty string to INT in SQL Server I came across a bug where I was using CAST(Col1 AS INT) + CAST(Col2 AS INT) where both Col1 and Col2 are VARCHAR and I was getting valid results out when Col1 or Col2 was blank and I didn't expect ... stackoverflow.com stackoverflow.com/questions/14636282/sql-how-to-convert-varchar-to-bigint
SQL, How to convert VARCHAR to bigint? I have a field that is VARCHAR(6) I am trying to insert it into another table of type bigint it is giving me an error (Error Converting from data type varchar to bigint here is what i am doing |