我的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
类型的列设置值。最初,我也面临着同样的问题,但是我使用这个小技巧解决了它。