2013-04-14 1 views
0

JavaScript와 같은 언어에서는 두 개의 조건문을 사용할 수 있으며 두 번째 조건문을 첫 번째 조건문으로 "보호"할 수 있습니다. 예를 들어 :SQL 'where'절의 조건 실행 순서에 의존하는 대신

if(scarryObject != null && scarryObject.scarryMethod()) { ... } 
// if scarryObject is null scarryMethod will not be called 

가 나는과 같이 SQL에서 동일한을 달성 것이라고 생각 :

where int_date > 19500101 
    and month(CONVERT(smalldatetime, ... int_date)) 

여기서 문제는 int_date -1, 0, 1 등 약간의 "나쁜"값의 경우 변환이 실패하고 sp가 오류와 함께 중지됩니다. 처음 체크 int_date > 19500101이 먼저 평가 될 것이라고 생각했고, false이면 두 번째 조건은 건너 뛸 것이라고 생각했습니다.

마치 이런 식으로 작동하지 않는 것 같습니다 ... 아니면? 이 일을하는 다른 방법이 있습니까?

감사합니다.

답변

-1

쿼리를 두 개로 분할 할 수 있습니다. 여기에 개념은 :

SELECT * 
FROM (
    SELECT * 
    FROM myTable 
    WHERE int_date > 19500101 
) t 
WHERE month(CONVERT(smalldatetime, ... t.int_date)) 
1

조회에 month(CONVERT....은 조건없는 조항으로, 문법적으로 정확하지 않습니다.

의 당신이 특정 숫자, 당신은

SELECT * 
FROM myTable 
WHERE case 
     when int_date > 19500101 
     then -1 
     else month(CONVERT(smalldatetime, ... int_date)) 
     end = @YourMonth 

당신은 '보호'할 것 '달'이 아닌 상태의 평가 것 원하는 것을 표현하는 가능한 방법을 비교하려는 가정 해 봅시다.