2009-12-28 34 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