避免在SQL Server Varchar列中避免默认日期(1900年1月)



我的SQL SEVE数据库中有一个经验表,该列有以下列:

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

如果您要处理结束日期的空字符串,则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

这将以您提供的格式返回结束日期,或者"当前工作"。

  IF (@LeaseCancelProcessedDate = '')    
    BEGIN    
      SET @LeaseCancelProcessedDate = NULL    
    END

在这里您可以使用此语法,在此@LeaseCancelProcessedDate中,我可以使用该语法,用于为DateTime类型的列设置值。最初,我也面临着同样的问题,但是我使用这个小技巧解决了它。

最新更新