database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 6641 게시물 읽기
No. 6641
특정필드에 문자열을 더하여 저장할 수 없을까요?
작성자
신인식(ssik425)
작성일
2006-04-25 21:19
조회수
2,814

- 질문내용처럼 A라는 필드가 있을때 다음과 같이 UPDATE를 해봤는데 안되네요..

 

1) UPDATE table SET a=a+"str";

2) UPDATE table SET a=a || "str";

 

이게 맞는 문법인지 통감이 않오네요..

 

혹 merge 나 다른 함수를 써야 하나요?....

이 글에 대한 댓글이 총 3건 있습니다.

update table set a = a || 'str'

입니다.:)

김상기(ioseph)님이 2006-04-26 00:17에 작성한 댓글입니다.

음..자답입니다. 쿼리 문제가 아니였네요..

제가 잘못 썼는데 상기님 답변 처럼 했는데도 제대로 값이

들어가지 않는 문제였습니다.

 

update table set a=a || 'str';

 

위처럼 아무리해도 되지 않더군요.. 그러다가 문득...

update table set a='str' ;

을 수행한후에

 

update table set a=a || 'str';

 

을 진행하였더니 제대로 값이 입력이 되더군요.. a라는 칼럼이 text필드였는데 Postgresql 내부적으로 초기화 과정을 거치는 것이 아닌가 생각이 드네요...

 

참고로 쿼리가 실행이 되더라도 값에는 변함이 없네요.. 아마도 8.0의 버그가 아닌가 싶네요.

신인식(ssik425)님이 2006-04-26 09:35에 작성한 댓글입니다.

아... 초기화 과정이 아니라,

 

문자열 연산의 상식입니다.

 

null + 문자열 = null 입니다. ^^

 

그래서, a = a || 'str' 에서

더해지는 a 가 null 이라면 결과도 null 입니다.

 

즉, a 값이 널일때는 빈문자열 ('')로 처리하라는 예외처리를 해야합니다.

 

오라클의 nvl() 같이, PostgreSQL에서는 coalesce() 함수를 씁니다.

 

즉, null 까지 고려한 것이라면,

 

a = coalesce(a, '') || 'str'

이 되어야겠지요.

 

김상기(ioseph)님이 2006-04-26 12:10에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6647테이블 스페이스 생성에 대한 질문.. [2]
채민석
2006-04-26
3531
6646이 sql이 의미하는 바를 좀 알려주세요. [1]
YS
2006-04-26
2817
6645컬럼 위치 변화에 관해 질문여..? [3]
조진우
2006-04-26
2614
6641특정필드에 문자열을 더하여 저장할 수 없을까요? [3]
신인식
2006-04-25
2814
6640pgsql 개작살 ㅠ_ㅠ; [2]
신기배
2006-04-25
6156
6639'mm-dd'와 'yyyy-mm-dd'의 비교는요? [2]
조우현
2006-04-25
2759
6638insert 인데 update로 가능하게?? [4]
MIN
2006-04-24
3007
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다