【发布时间】:2014-10-09 09:51:17
【问题描述】:
我有一张这样的桌子:
---------------------------------------------------------------
| 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,请按原样告知此查询:
以下声明的日期介于 2014 年 9 月 29 日至 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,我做错了什么?在 SQL Server 2008 R2 中使用 DATE 之间的 DATE 时的情况是否正确?
PS:请注意,我不想将查询更改为具有 WHERE 条件。
提前感谢堆栈溢出家庭。
【问题讨论】:
-
(CreatedDate between CreatedDate and @dateEnd)应该是(CreatedDate between @dateStart and @dateEnd),不是吗? -
@MikhailTimofeev 我的错误纠正了它,最初它就像它返回 Null。
-
当 transactionType != 7 并且(CreatedDate 不在 CreatedDate 和 @dateEnd 之间)时,您需要有 else 部分,您将获得 NULL 值!!!!
-
我认为你必须使用 Paydate 列而不是 CreatedDate 列。我对吗?
-
@TMAN-MAN 您的案例在日期之间返回一个有效值,在日期之外没有任何内容(空)。您仍然可以获得所有行,只是带有空值。
标签: sql sql-server-2008-r2 case