1

我试过在stackoverflow上搜索这个,但我找不到答案。

我正在简化我的问题,以便阅读更容易,如有必要,我会扩展。

我有一个 Employee SQL 表,NAME, ADDRESS, HIRE_DATE我们最近添加了一个REHIRE_DATE来跟踪新员工何时重新加入公司。我想编写一个 SQL 搜索来获取NAME, ADDRESS他们最近的雇用日期。如果他们是重新雇用的,我会使用该REHIRE_DATE字段,但如果他们是原始的,请使用该HIRE_DATE字段。我猜这是一个CASE正在寻找NULLREHIRE_DATE领域的声明,但除此之外我迷路了。

4

4 回答 4

4

这应该会产生您想要的结果:

SELECT Name
    , Address
    , CASE WHEN REHIRE_DATE IS NULL THEN HIRE_DATE ELSE REHIRE_DATE END
FROM Employee

这将检查重新雇用日期,如果是,NULL那么您将获得雇用日期,如果不是,那么您将返回重新雇用日期。

于 2012-07-20T15:22:25.257 回答
4

我认为您需要做的就是:

SELECT
    NAME
    , ADDRESS
    , ISNULL(REHIRE_DATE, HIRE_DATE) AS MostRecentHireDate
FROM Employee

在这种情况下,如果填写了重新雇用日期,则重新雇用日期应始终大于雇用日期(在被雇用之前您不能重新雇用。因此,除非它为空,否则您总是希望重新雇用日期,此时点你的聘用日期。听起来不错?

于 2012-07-20T15:22:49.247 回答
0

更好的是,使用 IFNULL():

SELECT IFNULL(REHIRE_DATE,HIRE_DATE) FROM Employee
于 2012-07-20T15:22:45.893 回答
0

您也可以使用 coalesce() 函数并这样做

select name, address, coalesce(rehire_date,hire_date) from table_name

如果第一个值为 null 它将转到第二个值

于 2012-07-20T17:46:43.487 回答