【问题标题】:Avoid default date (Jan 1900) in sql server varchar column避免在 sql server varchar 列中使用默认日期(1900 年 1 月)
【发布时间】:2017-06-03 20:59:25
【问题描述】:

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

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 date casting varchar sql-convert


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 2013-06-08
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      相关资源
      最近更新 更多