UPDATE 테이블명 SET 필드='값', 필드2='값', 필드3='값' WHERE 필드 LIKE '조건'



 update table B set B.mapx=(SELECT mapx FROM table2 A where B.P_IDX=A.IDX ),B.mapy=(SELECT mapy FROM table2 A where B.P_IDX=A.IDX) ;


insert는 간단한데 update도 나름 간단함..

'IT > [DB]' 카테고리의 다른 글

[DB] null 일때 대체값  (0) 2017.03.15
SQL 인젝션-  (0) 2014.10.29
[db] table 복사 insert into select  (0) 2013.06.26
MsSql -> MySql 전환  (0) 2013.06.14
[mysql] mysql 세팅, 재시작(privileges)  (0) 2012.12.13

INSERT INTO application_tbl1 SELECT * FROM application_tbl ;

복사할 테이블                    기존 테이블


☞ Oracle
- 테이블에 있는 컬럼을 명시적으로 지정하지 않아도 가능하다.

- 예제
INSERT INTO emp_log 
SELECT * FROM emp WHERE empno = 7900


☞ MSSQL
- 테이블에 있는 컬럼을 명시적으로 지정해야 한다.
- 자동증가 컬럼이 지정되어 있는 경우 SET IDENTITY_INSERT [dbo].[table_name] ON 구문 사용


- 예제
INSERT INTO emp_log 
(empno, ename, job, mgr, hiredate, sal, comm, deptno)
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno
FROM emp
WHERE empno = 7900

- 예제 : 테이블에 자동증가 컬럼이 지정되어 있는 경우 
SET IDENTITY_INSERT [dbo].[CLT_INSPECT_LOG_MPEG_HISTORY] ON 

INSERT INTO emp_log 
(empno, ename, job, mgr, hiredate, sal, comm, deptno)
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno
FROM emp
WHERE empno = 7900


출처 : http://blog.naver.com/totodaud1004?Redirect=Log&logNo=70130984889


'IT > [DB]' 카테고리의 다른 글

SQL 인젝션-  (0) 2014.10.29
간단한 update  (0) 2013.10.07
MsSql -> MySql 전환  (0) 2013.06.14
[mysql] mysql 세팅, 재시작(privileges)  (0) 2012.12.13
[sql] ALTER ADD  (0) 2012.11.06

MSSQL의 작업 환경(테이블 구조 및 뷰, 프로시져)을 MYSQL로 복사...

 

SQL은 insert, delete, update 밖에 모르는데...

 

어떻게 한담...!!

 

그래서 검색해 본 결과.. Migration 프로그램이 존재 한다는 걸 알게 되었는데.... (MySQL Workbench)

 

ㅠㅠ. 아쉽게도 테이블만 복사 됩니다..

 

또 다른 프로그램을 찾아 보았지만 역시 마찬가지...

 

어쩔수 없이 하나씩 확인해 가면서  적용 시켜야 하겠네요...

기존 MSSQL의 뷰와 프로시져를 확인 해보니 알지도 못하는 함수들이..(뭘 알아야 바꾸지.. )

 

그래서..함수들 변경 하면서 두번 고생 하지 않기 위해서 정리해 봅니다.

 

1. select top (100) Percent * from table

    Select 검색 시 표시 하고자 하는 목록 수를 제한 할때 Top를 사용하는데 'Percent'를 적용하여 전체 목록에 백분율을 적용해 볼수도 있다.

MySql ==>없음.. 검색 해 보니 어떤분이 직접 쿼리를 작성하신 분이 계신듯 한데.. 전 그냥 무시.

               Mysql 에서는 'Limit' 사용하여 범위를 지정 할 수 있음

               예) select * from table limit 5, 10 (5 번부터 10 개)

 

2. convert(varchar(10), GetDate() 또는 date_column, 121(시간 표시 형태)) 뭐징??

   날짜를 출력 하는 MSSQL 함수 (2013-03-18 16:08:25.123) 로 첫번째 인자로 인하여 10자리까지만 출력이 됨..

MySql ==>date_format(now() 또는 date_column, '%Y-%m-%d %T') 식으로 해주면 됨. (Y-m-d T 대소문자에 주의 하자)

(MsSql) convert(변환 자료형 , 값 )

(MySql) convert(값 , 변환 자료형 ) 사용법은 같으나 인자 위치가 다르다.(varchar ==> char)

 

3. REPLICATE('0', 10)

   첫 인수를 두번째 인수만큼 문자열로 만들어준다.

 

MySql ==> 에서는 없음. 함수로 직접 등록

DELIMITER $$
CREATE FUNCTION REPLICATE(charvar TEXT, intvar INT) RETURNS TEXT
BEGIN 
DECLARE nCnt INT DEFAULT 0;
DECLARE char_string TEXT DEFAULT ''; 
 WHILE (nCnt < intvar) DO  
  SET char_string = CONCAT(char_string, charvar);
  SET nCnt = nCnt+1;
 END WHILE;  
 RETURN char_string;
END $$
DELIMITER;

 

4. LEN( ), CAST(Int_column AS VARCHAR)

    Int_column 컬럼의 값을 문자로 변환 후 문자열 길이를 얻기.

    참고) LEN() => 문자열의 길이 'aa' =>2, '안녕' => 2

            DataLength() => 바이트의 크기 'aa' => 2, '안녕' => 4

  MySql ==> LENGTH( CAST(Int_column AS CHAR) )

LEN => LENGTH() 변경 (바이트의 크기를 반환함)

CAST : 변경 타입이 바뀜 (binary, char, date, datetime,decimal, signed, unsigned, time)

 

 5. ROW_NUMBER() OVER(Order by column_name)

    Over(column_name)에 의해 정렬된 순서대로 번호 생성

  MySql ==> (SELECT @rownum:=@rownum+1 as index , T.* FROM (select @rownum:=0) as rownum_init , 

information_schema.tables as T where ....... order by ...

    함수로는 지원하지 않으며 위와 같이 쿼리 호출 시 해당 명령을 추가해 추면 된다.

참고) View 에서 'rownum' 값을 얻고자 할 경우에는 'from' 절에 Select가 위치 할 수 없는 제약 조건으로 생성할 수 없다.

이럴 경우 프로시져를 만들어 호출 하는 방법으로 바꿔야 할 듯 싶다.

 

6. DATEDIFF(추출단위, 뺄 값, 대상 값)

    MsSql => 3 가지의 인자가 필요 하며 대상 값에서 뺄 값을 뺀 후 추출단위에 맞게 값을 리턴한다.

      추출단위 : year, month(m), day(d), hour, minute(mi), second(s)

        select DATEDIFF(d, '2013-03-19', '2013-03-20') ==> 1

        select DATEDIFF(second, '10:00:00', '10:00:10') ==> 10

        참고) 'getdate() + 1' 을 하면 하루가 더해진 값이 나온다.

 

  MySql => DATEDIFF(대상 값, 뺄 값), TIMEDIFF(대상 값, 뺄 값)

    mysql 날짜와 시간 계산 하는 함수가 따로 있음.

      select DATEDIFF('2013-03-20', '2013-03-19') => 1 (결과 값은 Day 기존)

      select TIMEDIFF('10:00:20', '10:00:00') => 00:00:20

      시간의 경우 각 단위로 전환 해주는 함수가 별도로 있음. HOUR(), MINUTE(), SECOND();

        select HOUR(TIMEDIFF('10:00:20', '10:00:00')) => 0

        select SECOND(TIMEDIFF('10:00:20', '10:00:00')) => 20

 

7. ISNULL(값1, 값2)

   MsSql => '값1' 이 'NULL' 이면 '값2' 를  반환한다. (둘다 NULL 이면 NULL 반환)

   MySql => ISNULL(값1) '값1' 이 NULL 이면 1, 아니면 0

   MySql => IFNULL(값1, 값2) 가 MsSql 의 ISNULL() 과 같은 기능


 [출처] MsSql -> MySql 전환|작성자 콩이아부지

'IT > [DB]' 카테고리의 다른 글

간단한 update  (0) 2013.10.07
[db] table 복사 insert into select  (0) 2013.06.26
[mysql] mysql 세팅, 재시작(privileges)  (0) 2012.12.13
[sql] ALTER ADD  (0) 2012.11.06
연산자  (0) 2012.07.06

flush privileges;

privilege

mysql_ 재시작한 현상

 mysql_에서

db를 정해주고

user 패스워드는 password로 정해준다 md5는 ㄴㄴ

'IT > [DB]' 카테고리의 다른 글

[db] table 복사 insert into select  (0) 2013.06.26
MsSql -> MySql 전환  (0) 2013.06.14
[sql] ALTER ADD  (0) 2012.11.06
연산자  (0) 2012.07.06
mysql table 내보내기  (0) 2012.06.15

+ Recent posts