sql 질의에 값을 넣을때 값에 따옴표를 넣는것이랑 안넣는것이랑 개념.? > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

sql 질의에 값을 넣을때 값에 따옴표를 넣는것이랑 안넣는것이랑 개념.? 정보

sql 질의에 값을 넣을때 값에 따옴표를 넣는것이랑 안넣는것이랑 개념.?

본문

update g4_write_테이블 set wr_1 = 50 where wr_1 < 50

테이블값중 wr_1필드 값이 50보다 작으면 50으로 모두 바꾸려고 하는데요..
위와 같이 하니까 잘되었습니다.

그런데 다름이 아니라..

update g4_write_ad_file4 set wr_1 = '50' where wr_1 < '50'
이렇게 50이라는 값에 '값'이렇게 하니 50보다 큰것들이건 작은것들이건 통으로 50으로 맞춰져 버렸습니다..ㅠㅜ 대략 난감입니다.

그냥 50 넣을때나, 어떨때는 '50' 따옴표, 어떨때는 "50" 상따옴표.. 이렇게 넣는것 같던데.. 개념을 모르겠습니다. 어떨때 어떻게 사용하는것이 맞는지요?

기본없이 이것저것 발로배운터라 기초적인 개념이 없는 초보에게 가르침부탁드립니다.
  • 복사

댓글 전체

문자와 숫자에 대한 구분부터 하셔야 합니다. '50'이면 숫자 50이 아니라 문자가 됩니다. ascii table이라고검색하면 나옵니다. 대문자 A가 65이고 소문자 a는 97 그리고 문자 '5'는 53으로 50보다 큰 수가 됩니다...

sql 정의를 할 때 integer형과 string형이 있는데 위의 wr_1은 integer형으로 원래형에 맞게 하려면
update g4_write_ad_file4 set wr_1 = 50 where wr_1 < 50 이렇게 되어야 합니다. 그러나 insert나 update의 경우 필드에 값을 저장하는 경우 자동으로 형변환을 해주기 때문에  update g4_write_ad_file4 set wr_1 = '50' 이렇게 적어도 wr_1값에는 50이라는 integer값이 입력됩니다. 그러나 이렇게 값을 입력하는 경우 형이 일치하지 않는다며 경고를 주고 실행되지 않는 데이터베이스들도 있습니다.

문제는 where wr_1 < '50' 여기서 발생하는 데요. wr_1이 문자형 '50'보다 작은 경우가 해당되고 '50'은 숫자로는 ord('50')값 즉, 53이므로 53보다 작은 값이 들어있는 wr_1는 모두 50이 됩니다.

참고로 '50'+0은 더하기는 숫자만 적용되므로 '50'은 자동으로 50이라는 숫자로 형변환되어 계산됩니다. 이것은 php에서도 동일하게 적용됩니다.
© SIRSOFT
현재 페이지 제일 처음으로