반응형
T-SQL과 JET-SQL 쿼리 비교 

 

한대성

MS SQL Server MVP

에이디컨설팅 | SQLLeader.com 운영자

 

 
다음과 같은 질문에 대해 다음과 같이 파생열 변환 또는 OPENROWSET 을 이용하라고 답변을 드렸습니다.


Question)
다름이 아니오라~ 엑셀 파일을 db에 패키지로 만들어 가져오는데 
원본 파일의 특정 필드에 대해 FLAG같은걸 만들어서 새로운 필드를 추가할려고 하는데 
테이블 복사 스크립트에서 SQL의 CASE문을 쓸려고 했는데 계속 구문 오류가 나드라구요
 
예)
select *, case when type='매출' then '01' else '02' end as TYPE_CODE 
from `경영계획$`
위와 같이 흔한 SQL문의 CASE문을 썻습니다. 왜 구문 오류가 나는건지요?
 
아니면 다른 방법이 있는건가요?
 
 
하지만, 답변을 드려놓고도 진짜 안될까~ 라는 생각에 여러 방법을 찾다보니 다음과 같이 처리할 수도 있는 것을 알게 되어 소개합니다.
Excel, Access 등과 같이 JetEngine을 이용하여 데이터를 가져오는 SQL 쿼리와 SQL Server의 데이터를 이용하는 T-SQL 쿼리는 상당히 많이 비슷하지만, 몇 가지 차이가 있습니다.
 
우선, 위의 경우는 다음과 같은 쿼리를 이용하면 됩니다.
  

SELECT * , IIF(Type="매출", "01","02") as TYPE_CODE

FROM `경영계획$`

 
 
 
 
 
 
 
이와 관련된 글이 있어서 다음과 같이 비교/ 정리해봤습니다. 참고하시기 바랍니다.
 

 

구분

T-SQL

JET SQL

Null 처리

COALESCE(Value, ValueToReturnIfNull)

or

ISNULL(Value, ValueToReturnIfNull)

NZ(Value, ValueToReturnIfNull)

Null 체크

WHERE Value IS NULL

WHERE Value IS NULL

or

WHERE ISNULL(Value)

문자열 부분

읽어오기

SUBSTRING(StringVal, StartPos, length )

length 필수

MID(StringVal, StartPos, [length])

length 옵션

문자열 내에서

문자 찾기

CHARINDEX(start, StringToSearch, StringToFind)

INSTR(start, StringToSearch, StringToFind)

문자열을

반대로 바꾸기

REVERSE(StringVal)

STRREVERSE(StringVal)

데이터 포멧 설정

어플리케이션이나 리포트에서 설정해야

Format(Value, FormatSpecification)

출력 결과는 String

LIKE 패턴 매칭

WHERE Column LIKE '%string%'

WHERE Column LIKE '_string_'

WHERE Column LIKE '[^a-z]'

WHERE Column LIKE "*string*"

WHERE Column LIKE "?string?"

WHERE Column LIKE "[!a-z]"

공백 제거

RTRIM(LTRIM(val))

TRIM(val)

데이터 유형 변경

CONVERT(DATATYPE, value)

or

CAST(value AS datatype)

CINT(value), CDBL(value),

CDEC(value), CSTR(value),

CDATE(value),CBOOL(value)

조건 처리

CASE WHEN Condition THEN ReturnIfTrue ELSE ReturnIfFalse END

IIF(Condition, ReturnIfTrue, ReturnIfValue)

날짜 데이터 처리

WHERE SomeDate = '2006-01-01'

문자열이 날짜로 암시적 변환이 일어나는 것임.

WHERE SomeDate = #1/1/2005#

날짜 데이터 함수

Date() 함수 이용

DATESERIAL(year,month,date)

시간 데이터 함수

Time() 함수 이용

TIMESERIAL(Hour, minute, second)

현재 날짜

시간 얻기

SELECT getdate()

SELECT now()

Boolen

WHERE Active=1

or

WHERE Active=0

(Active bit 데이터 타입)

WHERE Active = True

or

WHERE Active = False

(Active Boolean 데이터 타입)

문자열 사용

SELECT 'This is a string'

SELECT "This is a string"

나머지(Modulo) 구하기

SELECT value1 % value2

SELECT value1 MOD value2

문자열 붙이기

Val1 + Val2

Val1 & Val2

SELECT 문에서

별칭 사용

) A + B X 정의한 경우

SELECT X, X+C as D FROM (SELECT A+B as X, C FROM ... ) tmp

) A + B X 정의한 경우

SELECT A+B as X, X+C as D FROM ...

 

 
 
 
 
 
반응형

+ Recent posts