的SQL Server 2008 R2 - 选择案例当日期之间日期
问题描述:
我有一个表像这样:的SQL Server 2008 R2 - 选择案例当日期之间日期
---------------------------------------------------------------
| UserID | Amount | PayDate |TransactionType| ...
----------------------------------------------------------------
| 1 | 140 | 2014-09-30 22:00:00.000| 7 |
| 2 | 230 | 2014-09-30 22:00:00.000| 7 |
| 1 | 120 | 2014-08-01 22:00:00.000| 7 |
| 2 | 135 | 2014-07-30 22:00:00.000| 7 |
| 1 | 120 | 2014-09-30 22:00:00.000| 4 |
----------------------------------------------------------------
我写了下面的查询,但它返回NULL,请在此查询建议的是:
下面的日期宣布29/09/2014和2014年1月10日之间
Declare
@dateStart datetime= CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(GETUTCDATE())+2),GETUTCDATE()),101),
@dateEnd datetime=(CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(GETUTCDATE())-1),GETUTCDATE()),101))
Select
MemberID,
case
when transactionType = 7
and (PayDate between @dateStart and @dateEnd) then Amount
End AS 'Outstanding Amount'
from
MemberPayment
我的输出应该是:
| MemberID | OutStanding Amount|
---------------------------------
| 1 | 140 |
| 2 | 230 |
但查询返回null,我做错了什么? CASE当DATE之间的DATE使用正确的SQL Server 2008 R2吗?
PS:请注意我不希望将查询更改为具有WHERE条件。
预先感谢您的堆栈溢出家庭。
答
这应该做的工作
Declare
@dateStart datetime= DATEADD(dd,-(DAY(GETUTCDATE())+2),GETUTCDATE()),
@dateEnd datetime=DATEADD(dd,-(DAY(GETUTCDATE())-1),GETUTCDATE())
select MemberID, [Outstanding Amount]
from
(
Select
UserID as MemberID,
case
when transactionType = 7
and (PayDate between @dateStart and @dateEnd) then Amount
End AS 'Outstanding Amount'
from
MemberPayment
) As TmpQuery
where [Outstanding Amount] is not null
我删除的转换来自您的变量转换为VARCHAR。
然后,我放了一个选择你的查询,过滤只是结果与Oustanding金额非NULL。 请注意,我选择了UserID作为MemberID,因为你在你的例子中使用了UserID。
我用一个表测试它,其中PayDate是一个Datetime列。
正如已经在你的评论人提到我宁愿简单的方法(和它`快很多!):
Declare
@dateStart datetime= DATEADD(dd,-(DAY(GETUTCDATE())+2),GETUTCDATE()),
@dateEnd datetime=DATEADD(dd,-(DAY(GETUTCDATE())-1),GETUTCDATE())
select UserID, Amount as [Outstanding Amount]
from MemberPayment
where TransactionType = '7'
and PayDate between @dateStart and @dateEnd
'(CreatedDate和@dateEnd之间CreatedDate)'应该是'(间CreatedDate @dateStart和@dateEnd)',不是吗? – 2014-10-09 09:53:28
@MikhailTimofeev我的错误纠正了它,最初就像它的返回Null。 – 2014-10-09 09:57:56
当transactionType!= 7和(CreatedDate不在CreatedDate和@dateEnd之间)时,您需要有其他部分becoz,您将获得NULL值! – 2014-10-09 10:00:32