【问题标题】:Convert two fields (Month and Year) into a YYYY-MM-DD Field将两个字段(月份和年份)转换为 YYYY-MM-DD 字段
【发布时间】:2020-10-23 10:54:43
【问题描述】:

我正在通过数据库内公式使用 SAP HANA SQL(通过 Alteryx)。

我有两个字段(月份和年份),我需要将它们转换/组合成一个字段,显示为 YYYY-MM-DD。我可以在 Alteryx 本地成功地做到这一点,但我需要通过 SQL 在数据库中实现这一点。

查看图片了解 Alteryx 中的成功本地转换:

【问题讨论】:

    标签: hana alteryx


    【解决方案1】:

    这里似乎有两个目标:

    1. 根据yearmonth 信息构造一个有效日期。
    2. 以特定格式表示此日期,即。 YYYY-MM-DD

    第一部分可以像这样在HANA中完成:

    to_date( "<year_column>" || "<month_column>", 'YYYYMM') as newDate
    

    双管道|| 运算符连接字符串,这意味着如果&lt;year_column&gt;&lt;month_column&gt; 数据还不是字符串值,则它们将首先转换为字符串。 p>

    然后将连接的字符串转换为 date 数据类型。 to_date 转换函数采用模式字符串 YYYYMM,由于缺少 day 信息,它会即时补上并将日期设置为该月的第一天。
    to_date 转换还会检查是否仅创建了有效 日期。 例如,如果MM 不是介于0112 之间的值,则转换将失败并出现错误。

    这让我想到了下一个需要注意的潜在障碍:转换字符串模式YYYYMM 要求正好有四位数字表示年份,而正好有两位数字表示月份。
    虽然这对于现有的 year 数据可能没问题,因为现在大多数日期都用四位数表示,但 month 数据很可能没有 前导零(例如,当数据当前存储在数字字段中时)。

    要“修复”这个问题,我们可以只为到目前为止只有一位数字的所有值添加前导零。在 HANA 中有几种方法可以做到这一点,因为这似乎不在 ABAP 上下文中,所以我会选择一种适用于大多数 SQL 数据库的方法:
    LPAD ("&lt;month_column&gt;", 2, '0')

    这使我们得到第 1 步的以下表达式:

    to_date( "<year_column>" || LPAD ("<month_column>", 2, '0'), 'YYYYMM') as newDate
    

    现在第 2 步相对简单:将我们在第 1 步中构建的日期-数据转为特定格式。
    由于 date-data 本身没有特定的输出格式(即,您可以以任何您喜欢的方式显示或打印相同的日期格式 - 它不会更改数据),它需要为此转换为字符串

    其转换函数称为TO_NVARCHAR(),也可以采用转换模式:

    to_nvarchar( "&lt;date_data&gt;", 'YYYY-MM-DD') as fixedFormatDate

    就是我们要找的这个问题。

    将所有内容放在一个表达式中:

    to_nvarchar(to_date( "<year_column>" 
                         || LPAD ("<month_column>", 2, '0')
                        , 'YYYYMM')
               , 'YYYY-MM-DD') as fixedFormatDate
    

    虽然这是对一个看似简单的问题的冗长回答,但我认为了解此转换所需的所有相关步骤非常重要。

    【讨论】:

    • 我遵循逻辑,但也许我做错了什么。请参阅下面的粘贴:脚本:to_nvarchar(to_date("Year Combined" || LPAD ("Month Combined",2,'0') , 'YYYYMM') , 'YYYY-MM-DD') as fixedFormatDate Error: Formula In- DB (51):错误 SQLPrepare:[SAP AG][LIBODBCHDB DLL][HDBODBC] 语法错误或访问冲突;257 sql 语法错误:“as”附近的语法不正确:第 4 列第 17 行(在 pos 691)
    • 这意味着您的数据 - 在连接两个字段之后 - 与 YYYYMM 模式不匹配。检查这些输入列以查看偏差来自何处。
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    相关资源
    最近更新 更多