在SQL Query中添加条件

时间:2016-06-09 07:14:34

标签: sql-server

我想在现有查询中添加SQL条件,如果达到以下条件则返回NULL。

我有2列SHIFTA_START和SHIFTA_END。

  • [SHIFTA_START] =员工的时钟
  • [SHIFTA_END] =员工的时间

示例:

  • SHIFTA_START:3/10/2016 12:15:00 PM
  • SHIFTA_END:3/10/2016 12:30:00 AM

因此我想条件

IF DATEPART SHIFTA_START = DATEPART SHIFTA_END   
   AND SHIFTA_START > SHIFTA_END  
THEN return NULL

如何在SQL中创建代码?感谢帮助,非常感谢你! ^ _ ^

5 个答案:

答案 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

上面的计算将给出以下值;

  • 在同一天开始和结束但在结束后开始= NULL
  • 在同一天开始和结束并在结束前开始(正确)=分钟 在开始和结束之间
  • 在不同的日子开始和结束='不同的日子'

答案 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