我试过在stackoverflow上搜索这个,但我找不到答案。
我正在简化我的问题,因此它更容易阅读,如有必要我会扩展。
我有一个带有NAME, ADDRESS, HIRE_DATE
的员工SQL表,我们最近添加了一个REHIRE_DATE
来跟踪新员工何时重启公司。我想写一个SQL搜索来提取NAME, ADDRESS
及其最近的雇用日期。如果他们是重新雇佣的,我会使用REHIRE_DATE
字段,但如果他们是原创字段,请使用HIRE_DATE
字段。我猜这是一个CASE
语句,它在NULL
字段中寻找REHIRE_DATE
,但除此之外,我已经迷失了。
答案 0 :(得分:4)
我认为您需要做的就是:
SELECT
NAME
, ADDRESS
, ISNULL(REHIRE_DATE, HIRE_DATE) AS MostRecentHireDate
FROM Employee
在这种情况下,如果重新填写日期,则重新开始日期应始终大于雇用日期(在您被雇用之前,您不能重新 - 雇用。所以您总是希望采取重新雇佣的日期,除非它是空的,此时你需要雇用日期。听起来不错?
答案 1 :(得分:3)
这应该产生你想要的结果:
SELECT Name
, Address
, CASE WHEN REHIRE_DATE IS NULL THEN HIRE_DATE ELSE REHIRE_DATE END
FROM Employee
这将检查重新生成日期,如果是NULL
,那么如果不是,您将获得雇用日期,那么您将返回重新生成日期。
答案 2 :(得分:0)
更好的是,使用IFNULL():
SELECT IFNULL(REHIRE_DATE,HIRE_DATE) FROM Employee
答案 3 :(得分:0)
您也可以使用coalesce()函数并以这种方式执行
select name, address, coalesce(rehire_date,hire_date) from table_name
如果第一个值为null,它将转到第二个值