-
oracle 과 mssqlRDBMS/oracle 2010. 4. 20. 09:31
오라클과 MS-SQL 함수, 쿼리 차이점
쿼리 오라클9i MS-SQL2000 값 대체 DECODE
ex) DECODE(컬럼명, 'A', 'OK', 'B', 'NO', 컬럼명)CASE WHEN (오라클도 있음)
ex) CASE WHEN 컬럼명 = 'A' THEN 'OK' WHEN 컬럼명 = 'B' THEN 'NO' ELSE 컬럼명 END문자열 자르기 SUBSTR
ex) SUBSTR('ANSDDD', 1, 2) = 'AN'SUBSTRING
ex) SUBSTRING('ANSDDD', 1,2) = 'AN'시스템시간 SYSDATE GETDATE() 널값제어 NVL
ex) NVL(컬럼명,0) => 컬럼값이 널이면 0으로 대체isNULL
ex) isNULL(컬럼명,0) => 컬럼값이 널이면 0으로 대체형변환 TO_CHAR,TO_NUMBER
ex) TO_CHAR(컬럼명) => 문자열 형태로 변환CONVERT
ex) CONVERT(VARCHAR,컬럼명) => 문자열 형태로 변환차이점(MS-SQL 사용시 유의점)
1. MS-SQL2000은 재귀순환쿼리 (ORACLE 의 CONNECT BY) 구문이 없습니다..
MS-SQL2005에서는 지원된다고 합니다.
따라서 재귀순환이 필요할 경우 함수를 만들어 사용해야 합니다.
ex)
-------------------------------------------------------------------
CREATE FUNCTION fn_recursivemenu(@current as varchar(10))
RETURNS @Hierarchy table (
item_idx [int] IDENTITY (1, 1) NOT NULL , item varchar(20), up_item varchar(20), lvl int
)
-- Recusrsive메뉴 구현
as
begin
DECLARE @lvl int
DECLARE @stack table (item varchar(20), up_item varchar(20), lvl int)
INSERT INTO @stack VALUES (@current, null, 1)
SELECT @lvl = 1
WHILE @lvl > 0
BEGIN
IF EXISTS (SELECT * FROM @stack WHERE lvl = @lvl)
BEGINSELECT @current = item
FROM @stack
WHERE lvl = @lvlINSERT INTO @Hierarchy
SELECT menu_id, up_menu_id, menu_level FROM SYS_MENU
WHERE menu_id = @currentDELETE FROM @stack
WHERE lvl = @lvl
AND item = @currentINSERT @stack
SELECT menu_id, up_menu_id, @lvl + 1
FROM SYS_MENU
WHERE up_menu_id = @current
ORDER BY menu_id descIF @@ROWCOUNT > 0
SELECT @lvl = @lvl + 1END
ELSE
SELECT @lvl = @lvl - 1
END
RETURN
END
------------------------------------------------------------2. MS-SQL 은 하위쿼리 테이블 쿼리시 꼭 alias 명을 명시적으로
부여해야 됩니다.
ex) select * from (select * from table) --- 에러
select * from (select * from table) a --- OK3. MS-SQL2000 Rownum 매기는법(편법)
: MS-SQL에서 순차적인 번호를 매기기 위해서는 IDENTITY를 컬럼에 부여해주는방법밖에 없습니다.
꼭 순차적인 번호를 부여해야 하는 경우라면 아래예문같은 방법을 사용해서 구현할 수는 있습니다만 그다지 추천할 방법은 아닙니다.
ex)
-------------------------
SELECT
((SELECT count(*) FROM [테이블명] b where b.키컬럼 <= a.키컬럼)+200700000) AS ROWNUM
FROM
[테이블명] a
ORDER BY 키컬럼
-------------------------
[결과]
200700001
200700002
Math Functions Function Oracle SQL Server Absolute value ABS ABS Arc cosine ACOS ACOS Arc sine ASIN ASIN Arc tangent of n ATAN ATAN Arc tangent of n and m ATAN2 ATN2 Smallest integer >= value CEIL CEILING Cosine COS COS Hyperbolic cosine COSH COT Exponential value EXP EXP Round down to nearest integer FLOOR FLOOR Natural logarithm LN LOG Logarithm, any base LOG(N) N/A Logarithm, base 10 LOG(10) LOG10 Modulus (remainder) MOD USE MODULO (%) OPERATOR Power POWER POWER Random number N/A RAND Round ROUND ROUND Sign of number SIGN SIGN Sine SIN SIN Hyperbolic sine SINH N/A Square root SQRT SQRT Tangent TAN TAN Hyperbolic tangent TANH N/A Truncate TRUNC N/A Highest number in list GREATEST N/A Lowest number in list LEAST N/A Convert number if NULL NVL ISNULL
String Functions Function Oracle SQL Server Convert character to ASCII ASCII ASCII String concatenate CONCAT (expression + expression) Convert ASCII to character CHR CHAR Return starting point of character in character string (from left) INSTR CHARINDEX Convert characters to lowercase LOWER LOWER Convert characters to uppercase UPPER UPPER Pad left side of character string LPAD N/A Remove leading blank spaces LTRIM LTRIM Remove trailing blank spaces RTRIM RTRIM Starting point of pattern in character string INSTR PATINDEX Repeat character string multiple times RPAD REPLICATE Phonetic representation of character string SOUNDEX SOUNDEX String of repeated spaces RPAD SPACE Character data converted from numeric data TO_CHAR STR Substring SUBSTR SUBSTRING Replace characters REPLACE STUFF Capitalize first letter of each word in string INITCAP N/A Translate character string TRANSLATE N/A Length of character string LENGTH DATALENGTH or LEN Greatest character string in list GREATEST N/A Least character string in list LEAST N/A Convert string if NULL NVL ISNULL
Date Functions Function Oracle SQL Server Date addition (use +) DATEADD Date subtraction (use -) DATEDIFF Last day of month LAST_DAY N/A Time zone conversion NEW_TIME N/A First weekday after date NEXT_DAY N/A Convert date to string TO_CHAR DATENAME Convert date to number TO_NUMBER(TO_CHAR()) DATEPART Convert string to date TO_DATE CAST Get current date and time SYSDATE GETDATE()
업데이트 구문 바꾸기
mssql 의 update 이후 from 절은 오라클에서 먹히지 않는다.
따라서 서브쿼리를 통한 수정이 불가피하다.
===================================
어느 훌륭한 분이 긁기 가기 허가 신공을 발휘하사 많이 쓰는 것들이므로 업어....