Sql server 在SQL查询中添加条件

Sql server 在SQL查询中添加条件,sql-server,Sql Server,我想在现有查询中添加一个SQL条件,如果达到以下条件,则返回NULL 我有两列SHIFTA\u START和SHIFTA\u END [SHIFTA_START]=员工的计时钟 [SHIFTA_END]=员工的下班时间 例如: 班长开始时间:2016年10月3日下午12:15:00 班主任:2016年10月3日12:30:00 因此,我想对条件进行调整 IF DATEPART SHIFTA_START = DATEPART SHIFTA_END AND SHIFTA_STAR

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

我有两列SHIFTA\u START和SHIFTA\u END

  • [SHIFTA_START]=员工的计时钟
  • [SHIFTA_END]=员工的下班时间
例如:

  • 班长开始时间:2016年10月3日下午12:15:00
  • 班主任:2016年10月3日12:30:00
因此,我想对条件进行调整

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

如何在SQL中编写此代码?非常感谢您的帮助,非常感谢^_^

使用
大小写表达式

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.*

使用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

如果您想要一个case表达式,那么您希望将日期转换为date,而不是datetime(我想这就是您想要做的)

上述计算将为您提供以下值

  • 在同一天开始和结束,但在结束后开始=NULL
  • 当天开始和结束,结束前开始(正确)=分钟 在开始和结束之间
  • 在不同日期开始和结束=‘不同日期’

在简单情况下(如导致TRUE或FALSE的简单条件),您可以使用函数支持的条件值的内联版本…

下面的查询将给出所需的结果:-

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

这永远不会返回结果,请查看WHEN语句its
大小写表达式
,而不是WHEN语句,它当然会返回!因此,这些场都需要彼此相等,并且一个大于另一个。我是在说你的案子的WHEN部分EXPRESSION@RichBenner是的,你是对的,没有看名字。修正。阅读OP的问题,他正在检查shifta_start和shifta_end是否在同一日期,然后他在查找任何轮班结束日期早于开始日期的情况。@sagi我假设OP可能是根据员工的上班时间和下班时间来计算员工的工作时间。但不希望因为数据不正确而出现负值,也希望将结果限制在每天(例如,如果有人不打卡)。在我们的职业生涯中,我们都曾在某个时候处理过糟糕的数据。我知道,我已经在我的回答中对此进行了评论,并修正了我的回答。下面是一些不错的答案。请随时检查它们是否有效,并对任何相关内容进行更新投票。另外,请选择您认为最好的答案作为接受。DeaPosieStavaToLoad在SQL中不起作用,恐怕您需要在这里做一个计算。您需要知道这里的DATEPART计算可能会遇到的问题。如果这两个字段分别在6月1日和7月1日,该怎么办?您最好将datetime转换为date,以避免潜在的问题。
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