cmv*_*cmv 2 sql sql-server-2005
与此C#语句等效的SQL是什么?
bool isInPast = (x != null ? x < DateTime.Now() : true)
我需要构造一个只WHERE检查那个的子句.是一个需要有时无效,而不是空其他时间,我只希望条款考虑非空值,并考虑空值是真实的.x < NOW()x IS NOT NULLxdatetimeWHERE
现在这个条款是:
dbo.assignments.[end] < { fn NOW() }
这适用于非NULL情况,但NULL值似乎总是使表达式计算为false.我试过了:
dbo.assignments.[end] IS NOT NULL AND dbo.assignments.[end] < { fn NOW() }
而这似乎没有任何效果.
要在WHERE子句中使用,必须单独测试
where dbo.assignments.[end] is null or dbo.assignments.[end] < GetDate()
Run Code Online (Sandbox Code Playgroud)
或者您可以将空值转换为日期(始终为真)
where isnull(dbo.assignments.[end],0) < GetDate()
Run Code Online (Sandbox Code Playgroud)
或者你可以对从下面派生的位标志进行负面测试
where case when dbo.assignments.[end] < GetDate() then 0 else 1 end = 1
Run Code Online (Sandbox Code Playgroud)
bool isInPast =(x!= null?x <DateTime.Now():true)
bool只能有两个结果中的一个,无论是真还是假.
仔细观察您的标准,错误的唯一条件是何时
x!= null && x <now
鉴于这一事实,它变得很简单,因为在SQL中,x < now只能在何时进行评估x!=null,因此只需要一个条件
isInPast = case when dbo.assignments.[end] < { fn NOW() } then 0 else 1 end
Run Code Online (Sandbox Code Playgroud)
(1为真,0为假)
不知道什么{ fn NOW() }表示,但如果想SQL服务器提供当前时间,使用GETDATE()或者如果您正在使用UTC数据时,使用GETUTCDATE()
isInPast = case when dbo.assignments.[end] < GetDate() then 0 else 1 end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5213 次 |
| 最近记录: |