2011-08-10 52 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

但是我想(在一個困難的問題,我用這個作爲一個簡單的例子)使用反向這一說法。有什麼方法我可以寫BETWEEN 4和1?如果您嘗試執行此操作,則會返回空數據集。

+0

你是什麼意思的「反向」?首先你聲明「這個輸出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

我永遠不會依賴任何東西,而只是顯式地返回特定順序。關於「IN()」謂詞,DB2不會(似乎)保持返回順序。 –

+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 Z相當於X >= Y AND X <= Z。內置的假設是Y <= Z,我不相信有什麼辦法可以在沒有這個假設的情況下讓BETWEEN工作。 您可以使用此作爲解決方法,但:

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