출처 : http://www.sqler.com/bColumn/332980
안녕하세요. 이호엽 입니다.
SQL Server의 TSQL 문법과 MySQL 문법은 유사한 점이 많습니다.
MySQL 사용자가 SQL Server 사용 시, 혹은 반대로 SQL Server 사용자가 MySQL 사용 시
좀 더 편하게 접근 할 수 있도록 도움이 될까 해서 비교 자료를 만들어 보았습니다.
테이블, 프로시저, 트리거, DB 운영에 관련된 스크립트 사용법에 대해서 비교하여 지속적으로
글을 적어볼까 합니다.
우선 이번에는 문자열 함수에 대해 10가지 정도 적어 보았습니다.
구분 | SQL Server | MySQL |
설명 | 가장 왼쪽 문자에 해당하는 ASCII 코드 값 출력 | |
함수 | ASCII | ASCII |
예제 | SELECT ASCII('A') | SELECT ASCII('A') |
결과 | 65 | 65 |
구분 | SQL Server | MySQL |
설명 | 문자열에서 지정한 문자의 시작 위치 값을 반환 (왼쪽부터 한 문자씩 영어, 한글, 숫자, 기호상관없이 한 글자 당 1을 차지 하며 위치값은 1 부터 시작) | |
함수 | CHARINDEX | INSTR |
예제 | SELECT CHARINDEX('크리', '나홀로크리스마스') | SELECT INSTR('나홀로크리스마스', '크리') |
결과 | 4 | 4 |
구분 | SQL Server | MySQL |
설명 | 공백 제거 – SQL Server 는 선행, 후행 공백을 제거해주는 LTRIM, RTRIM을 혼용 사용해야 하며 MySQL 은 Trim 이란 함수가 선, 후행 공백을 제거해 줍니다. LTRIM(str), RTRIM(str) 함수도 따로 존재합니다. | |
함수 | LTRIM() – 선행공백 제거 RTRIM() – 후행공백 제거 | LTRIM() – 선행공백 제거 RTRIM() – 후행공백 제거 TRIM() – 양쪽공백 제거 |
예제 | SELECT LTRIM( RTRIM(' 넌 이제 빠져버렸어 ')) | SELECT TRIM(' 넌 이제 빠져 버렸어 ') |
결과 | “넌 이제 빠져 버렸어” | “넌 이제 빠져 버렸어” |
구분 | SQL Server | MySQL |
설명 | 문자열의 왼쪽부터 지정된 수만큼 문자를 반환 (사용법 동일) | |
함수 | LEFT | LEFT |
예제 | SELECT LEFT('메리크리스마스', 2) | SELECT LEFT('메리크리스마스', 2) |
결과 | 메리 | 메리 |
구분 | SQL Server | MySQL |
설명 | 문자열의 오른쪽부터 지정된 수만큼 문자를 반환 (사용법 동일) | |
함수 | RIGHT | RIGHT |
예제 | SELECT RIGHT('메리크리스마스', 2) | SELECT RIGHT('메리크리스마스', 2) |
결과 | 마스 | 마스 |
구분 | SQL Server | MySQL |
설명 | 시작 위치에서 지정한 문자 길이를 삭제하고 다른 문자 집합을 삽입 함수명만 다르고 인자 순서, 사용법이 동일합니다. | |
함수 | STUFF | INSERT |
예제 | SELECT STUFF('sad chritmas' , 1,3, 'happy') | SELECT INSERT('sad chritmas' , 1, 3,'happy') |
결과 | “happy chirtmas” | “happy chirtmas” |
구분 | SQL Server | MySQL |
설명 | 지정한 사이즈가 문자열 길이 보다 적은 만큼 문자열 왼쪽부터 지정한 문자열을 채우는 처리를 합니다. MySQL 에서는 LPAD 기본함수가 제공 됩니다. SQL Server는 기본 함수가 제공되지 않으므로 필요에 따라 사용자 정의 함수를 만들어 사용해야 합니다. | |
함수 | 기본 제공 함수 없음 | LPAD |
예제 | SELECT dbo.LPAD("ke some noise!!", 17, "!!") | SELECT LPAD("ke some noise!!", 17, "!!") |
결과 | make some noise!! | make some noise!! |
-- LPAD 사용자 정의 함수 생성 -- WHILE 문을 이용 처리하는 방법도 있으나 len 과 Replicate 사용법 명시 CREATE FUNCTION dbo.LPAD( @str AS VARCHAR(100), @len AS INT, @padstr ASVARCHAR(100) = '') RETURNS VARCHAR(2000) AS BEGIN RETURN CASE WHEN LEN(@str) >= @len THEN SUBSTRING(@str, 1, @len) ELSE SUBSTRING(REPLICATE( @padstr, @len), 1, @len - LEN(@str)) + @str END END |
구분 | SQL Server | MySQL |
설명 | 위에 LPAD 와 반대로 지정한 문자열을 오른쪽부터 채워줍니다. MySQL 에서는 RPAD 기본 함수가 제공됩니다. 마찬가지로 SQL Server 에서는 필요에 따라 사용자 정의 함수를 만들어 사용해야 합니다. | |
함수 | 기본 제공 함수 없음 | RPAD |
예제 | SELECT dbo.RPAD("make some noise!!", 17, "!!") | SELECT RPAD("make some noise!!", 17, "!!") |
결과 | make some noise!! | make some noise!! |
-- RPAD 사용자 정의 함수 생성 -- WHILE 문을 이용 처리하는 방법도 있으나 len 과 Replicate 사용법 명시 CREATE FUNCTION dbo.RPAD( @str AS VARCHAR(100), @len AS INT, @padstr ASVARCHAR(100) = '') RETURNS VARCHAR(2000) AS BEGIN RETURN CASE WHEN LEN(@str) >= @len THEN SUBSTRING(@str, 1, @len) ELSE @str + SUBSTRING(REPLICATE( @padstr, @len), 1, @len - LEN(@str)) END END |
구분 | SQL Server | MySQL |
설명 | 지정한 문자열의 길이를 반환 합니다. SQL Server는 후행 공백을 무시하지만 MySQL CHAR_LENGTH 함수는 공백도 포함하여 길이를 반환합니다. | |
함수 | 기본 제공 함수 없음 | RPAD |
예제 | select LEN('abc ') | SELECT CHAR_LENGTH('abc ') |
결과 | 3 | 5 |
구분 | SQL Server | MySQL |
설명 | 문자열을 합하여 결과를 출력 | |
함수 | + 연산자를 통해 처리 | CONCAT |
예제 | SELECT 'SQLER Members' + ' Victory!!' | SELECT CONCAT('SQLER Members',' Victory!!') |
결과 | SQLER Members Victory!! | SQLER Members Victory!! |
'DataBase > MS-SQL' 카테고리의 다른 글
MS-SQL 페이징 쿼리 종류별 성능 비교 (0) | 2012.02.09 |
---|---|
MySQL 에서 MS-SQL 로 데이터 이관 (MySQL ODBC Connector) (5) | 2012.01.10 |
MSSQL 2005 Server 데이터베이스 복원 (Restore) (0) | 2011.04.08 |
MS-SQL Server 2005 암/복호화 (0) | 2011.04.07 |
MSSQL 인덱스 조각화 : 인덱스 다시 작성 (0) | 2010.11.26 |
댓글