2009-12-28 50 views
0

我有一個包含四個可能性(例如:1 - 4),TestDate列和其他數據的TestNumber列的表。我想做一個查詢,將返回一個用戶定義的年份和測試數字。例如,我要回測試數字1和2是有年份的日期2008年SQL查詢返回指定的測試編號和日期

編輯: 我基本上想這兩個語句合併成一條語句:

SELECT * FROM testTable WHERE testNumber = '1' AND '2' 
SELECT * FROM testTable WHERE testDate between #01/01/2008# and #01/01/2009# 
+0

「testNumber」是文本字段還是數值?如果是數字,則會丟失引號。 – 2009-12-30 01:13:53

+0

testNumber是字符串。實際的表格使用testNumber的跑道編號('16L,34R')。 – ScottK 2010-01-02 01:40:36

回答

3

試試這個:

SELECT * 
FROM testTable 
WHERE testNumber IN ('1', '2') 
    AND testDate between #01/01/2008# and #01/01/2009# 
+0

我正在使用訪問 – ScottK 2009-12-28 21:47:23

+1

@ScottK:在詢問SQL問題時指定數據庫引擎至關重要。否則,你會得到完美的,但沒有用的答案(比如使用Cast())。 – 2009-12-30 01:10:40

+0

我想這個答案是錯誤的,因爲它不會返回與原始問題的2條SQL語句的UNION相同的結果。 AND應該改爲OR,否? – 2009-12-30 22:31:28

3

我不確定任何人都能正確回答這個問題。 @Manu結合了標準,而不是結果集,所以他不會得到提問者兩個SQL語句的UNION。在我看來,它應該是:

SELECT * FROM testTable WHERE testNumber In ('1', '2') 
    OR testDate between #01/01/2008# and #12/31/2008# 

注意某些數據庫引擎(包括噴氣/ ACE)解讀之間對值/和包含性,所以標準應該是第一天和最後一天這一年,而不是兩年的1月1日。

但這實際上取決於特定的數據庫引擎對BETWEEN/AND的解釋。

還要注意的是,如果日期字段有時間部分,你需要使用:

testDate >= #01/01/2008# and testDate < #01/01/2009# 

...而不是BETWEEN/AND。

+0

馬努的回答是對我有用的。我有一個表單,用戶可以選擇他們想要的testNumbers(通過複選框)以及他們想要的年份(通過組合框)。我使用這些查詢。 – ScottK 2010-01-02 01:44:58

+0

感謝關於BETWEEN/AND日期的信息!我不確定它是否具有包容性。 – ScottK 2010-01-02 01:46:06

+0

如果@Manu的回答給了你正確的結果,你顯然錯誤地陳述了你需要的結果集。你說你需要兩個結果集的組合,這需要一個OR。也許你應該改變你的問題,以反映你*不希望你發佈的兩個選擇陳述的聯盟,而是一個結合了這兩個標準的陳述。 – 2010-01-02 23:21:22