我尝试使用前一个月从一个表中提取两列作为我的日期范围。我觉得我很亲近。当我解析 以下代码,Management Studio(SQLServer2012)告诉我命令已成功完成。当我执行查询时,响应为:消息116,级别16,状态1,行3当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式。
以下是查询...
select (column1), (column2)
from (table1)
WHERE (column2) IN (SELECT DATEADD(DAY,1,EOMONTH(GETDATE(),-2)) AS StartDate, EOMONTH(GETDATE(),-1) AS EndDate)
order by (column2)
select dateadd子句本身成功地拉出了该月的第一天和最后一天......我不确定如何使用EXIST运算符...厌倦了几个不同的事情,但都产生了错误。
感谢您的帮助!
答案 0 :(得分:1)
这是你想要做的吗?
select column1, column2
from table1
where column2 >= DATEADD(DAY, 1, EOMONTH(GETDATE(), -2)) and
column2 <= EOMONTH(GETDATE(), -1)
order by column2;
您的代码有一个子查询,其中没有必要。
答案 1 :(得分:1)
尝试使用BETWEEN
代替IN()
:
SELECT column1, column2
FROM table1
WHERE column2 BETWEEN DATEADD(DAY,1,EOMONTH(GETDATE(),-2))
AND EOMONTH(GETDATE(),-1)
编辑:我想特别强调BETWEEN
,因为这个问题让我相信IN()
是从值列表中查找而不是&#34;之间的混淆。一系列价值观。
BETWEEN
本身通常会让人感到困惑,如果重新编写为包含底层运算符的明确范围,可能会更好理解:
SELECT column1, column2
FROM table1
WHERE column2 >= DATEADD(DAY,1,EOMONTH(GETDATE(),-2))
AND column2 <= EOMONTH(GETDATE(),-1)
答案 2 :(得分:0)
对结束日期声明进行了调整。我现在从4-1-2018到4-30-2018获取数据。而不是&lt; =到上个月的最后一个日期,我使用&lt;这个月的第一天谢谢!
SELECT fromname,completiontime 来自文件 完成时间&gt; = DATEADD(DAY,1,EOMONTH(GETDATE(), - 2)) 和完成时间&lt; DATEADD(DAY,1,EOMONTH(GETDATE(), - 1)) 按CompletionTime desc排序