【问题标题】:replace string with date value用日期值替换字符串
【发布时间】:2021-04-11 12:57:43
【问题描述】:

目前,我的包中有一个派生列转换,它将查找 NULL 值,如果它是 NULL,它将给它一个带有正斜杠的默认日期,如下所示

REPLACENULL([date],"2/2/1999")

但是,如果该字段不是NULL,它将有一个类似于20200202 的字符串日期。我想添加到当前表达式中,如果该字段不为空,则它将20200202 替换为2020-02-02。我将不胜感激并给予高度评价!

【问题讨论】:

  • 你为什么要使用格式化字符串? SSIS 支持日期和时间数据类型,您应该使用它们。 '2/2/1999' 具有明确的价值,但 '1/2/2020' 呢?那是 2 月 1 日还是 1 月 2 日?

标签: sql sql-server ssis etl derived-column


【解决方案1】:

首先,您应该使用1999-02-02 作为默认值,以确保所有值都以相同的格式存储。以下表达式会将日期格式从yyyyMMdd 转换为yyyy-MM-dd

REPLACENULL([date],"") == "" ? "1999-02-02" : LEFT([date],4) + "-" + SUBSTRING([date],5,2) + "-" + RIGHT([date],2)

【讨论】:

    【解决方案2】:

    这就是我在 SQL Server 中的做法。

    注意FORMAT 需要 SQL Server 2012+

    DECLARE @StringDate varchar(20);
    
        -- NON-NULL date.
        SET @StringDate = '20200202'
        SELECT
            ISNULL ( FORMAT( CAST ( @StringDate AS date ), 'yyyy-MM-dd' ), '2/2/1999' ) AS NonNullStringDate;
    
        -- NULL date.
        SET @StringDate = NULL;
        SELECT
            ISNULL ( FORMAT( CAST ( @StringDate AS date ), 'yyyy-MM-dd' ), '2/2/1999' ) AS NullStringDate;
    

    返回(分别)

    +-------------------+
    | NonNullStringDate |
    +-------------------+
    | 2020-02-02        |
    +-------------------+
    
    +----------------+
    | NullStringDate |
    +----------------+
    | 2/2/1999       |
    +----------------+
    

    为了日期格式的一致性,您可能需要考虑将2/2/1999 更改为1999-2-2

    【讨论】:

      猜你喜欢
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 2020-10-04
      • 2016-10-28
      • 2019-03-04
      • 1970-01-01
      相关资源
      最近更新 更多