SQL Date值表示“PRESENT”(截至今天的日期)

时间:2014-08-27 06:08:11

标签: sql sql-server

我有一个处理就业日期和日期剩余(公司)的数据库

EID    |Name     |Status1    |Hired          |LefttheCOmpany
11     |Kid      |Hired      |2014-01-01     |2014-01-01
12     |Suzi     |Hired      |2014-03-01     |2014-03-01
13     |Mac      |Fired      |2014-04-01     |2014-07-17

Kid和Suzi仍然是公司的一部分,因此这就是为什么他们的左边日期与同一日期相同。我在GUI中简单地做的就是我只使用IF并在" LefttheCmpany"上输出PRESENT。表中的列:

EID    |Name     |Status1    |Hired          |LefttheCOmpany
11     |Kid      |Hired      |2014-01-01     |PRESENT
12     |Suzi     |Hired      |2014-03-01     |PRESENT
13     |Mac      |Fired      |2014-04-01     |2014-07-17

但是,SQL中的DATE数据类型是否存在固有值,这意味着" PRESENT"? (就像当 NULL 意味着SQL不知道值意味着什么时。)

因此,当查询记录时,SQL本身会在记录中说出PRESENT(或其他内容)吗?

我做了什么,但也许有更好的方法来解决这个问题。

5 个答案:

答案 0 :(得分:4)

有一个getdate()函数用于获取当前日期,但除此之外我不认为SQL Server中有任何代表PRESENT的内容

我的建议是将这些行设置为null,当您查询表时,可以在该列中设置getdate()。像这样:

select getdate() as LefttheCOmpany from table where LefttheCOmpany is null

根据我的建议使Navneet的查询更有用

select EID,Name,Status1,Hired,
case when Hired=LefttheCOmpany then 'Present' 
else LefttheCOmpany end as LefttheCOmpany 
from table

答案 1 :(得分:3)

请使用ISNULL()功能,如果值为null,则会将其替换为' Present'。

SELECT ISNULL(LeftTheCompany,'Present')

答案 2 :(得分:2)

以下查询将在SQL

中使用
select EID,Name,Status1,Hired,case when Hired = LefttheCOmpany  
then 'Present' else LefttheCOmpany end as LefttheCOmpany from table 

答案 3 :(得分:1)

我也相信NULL是LefttheCmpany列下的一个合适的条目,你可能会惊讶于民众对这类数据的敏感程度。

但是把它放在一边为什么不使用COALESCE()或ISNULL()?

select COALESCE(LefttheCOmpany, getdate()) as LefttheCOmpany from ThatTable

select ISNULL(LefttheCOmpany, getdate()) as LefttheCOmpany from ThatTable

对COALESCE vs. ISNULL的详细解释 见:http://sqlmag.com/t-sql/coalesce-vs-isnull


修改

应该说日期(或日期时间)列不能携带字符串,所以如果你真的想看到"呈现"在该列中,您必须将字段转换为| n | var | char,例如

COALESCE( convert(varchar(10),LefttheCOmpany,120) , 'Present') 

答案 4 :(得分:1)

NULL的问题是你无法比较它。遇到NULL时,你必须为你指定一个值,比如0或-1,或者其他什么。在这种情况下,该列不适用于当前使用的。我会传达一个员工没有通过指定未来日期(即最大值(9999-12-31))离开公司。