我有一个处理就业日期和日期剩余(公司)的数据库
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(或其他内容)吗?
我做了什么,但也许有更好的方法来解决这个问题。
答案 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))离开公司。