避免在sql server varchar列中使用默认日期(1900年1月)

时间:2017-06-03 20:59:25

标签: sql-server date casting varchar sql-convert

我的sql sever数据库中有一个经验表,其中包含以下列:

exp_id int,
u_id int ,
exp_jobtitle varchar(100),
exp_company varchar(100),
exp_startdate date,
exp_enddate varchar(50),
exp_working varchar(50),
exp_description varchar(2000),

如果我目前正在该特定工作中工作,那么exp_enddate列中没有插入任何内容,但当前在exp_working列中工作。

在前端,我正在显示结果:

如果我的工作在2015年5月 - 2015年6月结束,那么当我正在工作时会出现问题

我想要这个输出May 2015 - Currently Working而且我得到这样的输出

May 2015 - Jan 1900Currently Working

通过此查询: -

select right(convert(varchar(50), cast('exp_enddate' as date), 106), 8)

如何避免此默认日期或是否有其他方法可以获得所需的输出?

May 2015 - Currently Working

1 个答案:

答案 0 :(得分:0)

如果您正在处理结束日期的空字符串,那么SQL Server将自动将其视为1/1/1990。

您可以通过运行以下查询来查看:

SELECT CAST( '' AS DATE )

返回1900-01-01

您可以做的是检查结束日期是否为空,如果是,请将其视为当前有效,如下所示:

SELECT 
    CASE 
        WHEN exp_enddate = '' 
        THEN 'Currently Working' 
        ELSE RIGHT( CONVERT( VARCHAR(50), CAST( exp_enddate AS DATE ), 106 ), 8 )
    END

这将以您提供的格式返回结束日期,或“当前正在工作”。