我想在现有查询中添加SQL条件,如果达到以下条件则返回NULL。
我有2列SHIFTA_START和SHIFTA_END。
示例:
因此我想条件
IF DATEPART SHIFTA_START = DATEPART SHIFTA_END
AND SHIFTA_START > SHIFTA_END
THEN return NULL
如何在SQL中创建代码?感谢帮助,非常感谢你! ^ _ ^
答案 0 :(得分:2)
使用CASE EXPRESSION
:
SELECT t.*,
CASE WHEN CAST(SHIFTA_START as DATE) = CAST(SHIFTA_END as DATE)
AND SHIFTA_START > SHIFTA_END
THEN NULL
ELSE SomeOtherValue
END as Your_Ind_Column
FROM YourTable
这将导致整个数据集和指示列。我没有看到这个专栏如何对您有所帮助,但如果您只想这样做,请从查询中删除t.*,
。
答案 1 :(得分:2)
你是在案例表达之后,你想把日期转换为日期而不是日期时间(我认为这就是你想要做的事情)。
SELECT
CASE
WHEN CONVERT(date, SHIFTA_START) = CONVERT(date, SHIFTA_END)
AND SHIFTA_START > SHIFTA_END
THEN NULL
ELSE CASE
WHEN CONVERT(date, SHIFTA_START) = CONVERT(date, SHIFTA_END)
THEN DATEDIFF(mi, SHIFTA_START, SHIFTA_END)
ELSE 'Different Days'
END
END AS TimeWorked
FROM TableName
上面的计算将给出以下值;
答案 2 :(得分:1)
在简单的情况下(如导致TRUE或FALSE的简单条件),您可以使用IIF()函数支持的条件值的内联版本...
答案 3 :(得分:1)
以下查询将提供所需的结果: -
declare @test table
(SHIFTA_START datetime NOT NULL,
SHIFTA_END datetime NOT NULL
)
Insert into @test
values('2016-03-10 12:15:00 PM','2016-03-10 12:30:00 AM')
select
CASE WHEN ((datepart(dd,SHIFTA_START) = datepart(dd,SHIFTA_END)) AND (cast(SHIFTA_START as time) > cast(SHIFTA_END as time)))
THEN NULL
ELSE '' END AS RESULT from @test
NULL
答案 4 :(得分:0)
使用 CASE WHEN 条件。这是一个例子:
SELECT
CASE WHEN
DATEPART SHIFTA_START = DATEPART SHIFTA_END
AND SHIFTA_START > SHIFTA_END
THEN
NULL
ELSE
YOUR_COLUMN
END
FROM YOUR_TABLE