2011-08-10 2 views
1

나는 간단한 문을 쓰고있다. 나는 (더 단단한 문제에 간단한 예로서 내가 이것을 사용하고 있습니다) 역이 문을 사용하려면 그러나T-SQL 문 사이

create table temp(mid int) 

insert into temp 
values 
(1),(2),(3),(4) 

select * from temp 
where mid between 4 and 1 

drop table temp 

이 1,2,3,4

를 출력합니다. 4와 1 사이에 쓸 수있는 방법이 있습니까? 이것을 실행하려고하면 빈 데이터 집합이 반환됩니다.

+0

"역순으로"는 무엇을 의미합니까? 먼저 "this outputs 1,2,3,4"라고 말합니다. 그런 다음 나중에 "이것을 실행하려고하면 빈 데이터 집합이 반환됩니다"라고 말합니다. 무슨 일이 일어나고 있는지 그리고 무엇을 원하는지에 대해 구체적으로 설명하십시오. 역순으로 주문을 뒤집거나 "외부"4와 1을 원한다는 의미입니까? – Paparazzi

+0

나는 지나치게 단순화했다고 생각합니다. 왜 4와 1 사이에서 사용하고 싶습니까 (수학적으로는 => 4와 <= 1) 가능한 것은 아니기 때문에 제로 레코드를 올바르게 반환해야합니다. 당신이 달성하고자하는 것에 대한 더 많은 정보는 우리가 당신이 문제에 대한 올바른 해결책을 제시하는 데 도움이 될 수 있습니다. – HLGEM

답변

1

아마 범위가 유용 할 것입니다. 사용하지 왜

IN (4,3,2,1) 

또 다른 생각 :

WHERE mid < 4 and mid > 1 

또는

WHERE mid !> 4 and mid !< 1 
2

나는 당신이 당신의 결과를 정렬 할 생각합니다.

SELECT mid 
FROM temp 
WHERE mid BETWEEN 1 AND 4 
ORDER BY mid DESC 

또는, 대신 함수에서 사용할 수 있습니다 :

SELECT mid 
FROM temp 
WHERE mid IN(4, 3, 2, 1) 
+2

나는 특정 주문을 반환하기위한 명시적인 주문에만 의존하지 않을 것입니다. DB2는'IN() '술어와 관련하여 반환 주문을 guaruntee하지 않습니다. –

+0

내 첫 번째 대답은 그/그녀가 찾고 있던 것을 추측하고있었습니다. 두 번째 예는 자신의 질문에 답할 수있는 대안을 제시하고있었습니다. –

+1

표준을 준수하는 모든 SQL 데이터베이스에는 결과를 특정 순서로 넣으려면 ORDER BY가 필요합니다. – DaveE

1

은 내가 BETWEEN를 사용하지 않는, 그냥 <, <=를 사용하여, 더욱 쉬워 더 유연하고 명확 , >>=.

나는이 작업을 수행 할 것 :

create table temp(mid int) 
insert into temp 
values 
(1),(2),(3),(4) 
select * from temp 
where mid<=4 and mid>=1 --same as where mid>=1 and mid<=4 
-- ^^^^^^  ^^^^^^ 
drop table temp 
0

표현 X BETWEEN Y AND ZX >= Y AND X <= Z에 해당합니다. 내장 된 가정은 Y <= Z이고 나는 그 가정없이 BETWEEN을 작동시키는 방법이 없다고 생각합니다. 그래도 해결 방법으로 사용할 수 있습니다.

... 
WHERE X BETWEEN Y AND Z 
    OR X BETWEEN Z AND Y