안규 공부방

MS-SQL > UPDATE - 자료 수정

등록일 : 2017-06-30 16:58 조회수 : 94,269

1. 기본문법

NUMBER 필드의 값이 1 인 레코드에 이름필드에 '최안규' ID 필드에 'CAK0280' 값을 넣어라.

UPDATE 테이블명 set name='최안규',id='CAK0280' WHERE NUMBER=1

2. STUFF() , SUBSTRING() 을 이용한 업데이트

update 쿼리와 STUFF 함수와 SUBSTRING함수를 이용하는 방법을 알아보도록 하겠습니다.....

다음과 같은 경우가 있다고 가정을 해 보겠습니다.

테이블명 : TEST

board_idx

 NUM

1

001001

2

001002

3

001003

4

000004

5

000005


위의 테이블처럼 TEST 테이블에 NUM 필드가 001001 처럼 되어 있습니다.

만약 두번째 값에서 부터 2개 문자가 '01' 로 되어 있는 값을 '00' 으로 일괄되게 수정하고 싶으시면 어떻게 하시겠습니다.

즉, 아래 구조처럼 바뀌게 되는겁니다.

테이블명 : TEST

board_idx

 NUM

1

000001

2

000002

3

000003

4

000004

5

000005


FROM 문에 SUBQUERY 를 사용하고, STUFF 함수와 SUBSTRING함수를 이용하면 해결하실수 있습니다.

아래의 쿼리처럼 하시면 됩니다.

UPDATE test SET num= STUFF(num,2,2,'01') where substring(num,2,2)='01'

STUFF 함수는 특정위치의 값을 바꾸어 줄수 있습니다.

STUFF(문자, 시작위치, 길이, 바꿀문자)

NUM 필드에서 2번째 문자에서 2개를 가지고 와서 00으로 바꾸어 줍니다.
WHERE 문에서 SUBSTRING(NUM,2,2)='01' 조건을 보면 아시겠지만, 01 값을 가지고 와서 특정위의 문자를 바꾸어 주면 됩니다. 

3. 일괄 UPDATE

update customer_goods SET c_name = customer.c_name, c_type=customer.c_type, 
c_jumin1=customer.c_jumin1, c_jumin2=customer.c_jumin2 , c_office_no=customer.c_office_no, 
c_zipcode1=customer.c_zipcode1, c_address=customer.c_address,c_zipcode2=customer.c_zipcode2, 
c_tel1=customer.c_tel1, c_tel2=customer.c_tel2, c_tel3=customer.c_tel3, c_email=customer.c_email, 
c_bigo=customer.c_bigo, c_jumin_date=customer.c_jumin_date FROM customer INNER JOIN customer_goods 
ON customer_goods.g_custom_idx = customer.custom_idx

3. Replace() 함수를 이용한 일부분 업데이트

데이터 칼럼에 AAA 랑 문장이 있을 경우, 모두 BBB 로 수정을 하고 싶을 경우 Replace 함수를 이용할 수 있습니다.

Update board set title=replace(title,'AAA','BBB') where 조건

위와 같은 형식으로 하시면 됩니다.

위의 테이블의 필드는 Varchar 형 일때만 가능합니다. Text , nText 형에서는 에러를 발생합니다.

replace 함수의 1 인수에 대한 인수 데이터 형식 ntext이(가) 잘못되었습니다. 위와 같은 에러를 발생합니다.

이런경우 칼럼을 varchar 형으로 바꾼 후 이용하면 됩니다.

Update board set content=replace(convert(varchar(8000),content),'AAA','BBB') where 조건

위와 같은 형식으로 convert 함수를 이용해서 형식을 바꾸어 줍니다.
varchar 형으로 되어 있는 필드 , 데이터 값은 '2012-12-30 오전 12:00' 와 같은 형식으로 되어 있는 경우, Datetime 형으로 변환시키면 에러가 난다.
이럴경우 '2012-12-30 12:00' 같은 형태로 바꾸어서 디비 마이그레이션을 해야 한다. 이런경우 substring을 이용하면 되는데, 쿼리는 아래와 같다.

writeday (varchar) --> writeday1 (datetime) 으로 변환시킨다.

update areum_board1 set writeday1=dateadd(mm,1,substring(writeday,1,10) + substring(writeday,14,9) + case substring(writeday,12,2) when '오전' then 'AM' else 'PM' end)
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.