SQL语法解释(强制转换、插入、日期)

SQL语法解释(强制转换、插入、日期),sql,db2,Sql,Db2,这是出于教育目的,但有人能解释一下下面的语法在做什么吗 CAST(INSERT(CHAR(DATE(DB2_RID), USA), 3, 3, '') AS CHAR(10)) AS MONTH 我已经在谷歌上搜索了这些函数并了解了其中的大部分内容,但我只是对将2017-12-18-13.21.04.442956的值转换为2017年12月的过程感到好奇 DB2_RID的数据类型是时间戳 所以我知道CAST将内部值转换为10字符。我想我的困惑是,它怎么知道这是一个日期,而不包括一个月的某一天,比

这是出于教育目的,但有人能解释一下下面的语法在做什么吗

CAST(INSERT(CHAR(DATE(DB2_RID), USA), 3, 3, '') AS CHAR(10)) AS MONTH
我已经在谷歌上搜索了这些函数并了解了其中的大部分内容,但我只是对将2017-12-18-13.21.04.442956的值转换为2017年12月的过程感到好奇

DB2_RID的数据类型是时间戳

所以我知道CAST将内部值转换为10字符。我想我的困惑是,它怎么知道这是一个日期,而不包括一个月的某一天,比如2017年1月12日。

  • DATE(DB2\u-RID)
    =将时间戳转换为日期:
    2018-12-18

  • CHAR(…,USA)
    =使用US格式将日期转换为字符串:
    '12/18/2017'

  • 插入(…,3,3',)
    =将从位置3开始的3个字符替换为 空字符串,即删除
    /18
    '12/2017'

  • CAST(…作为CHAR(10))
    :相当愚蠢,为什么不是CHAR(7)?:
    '12/2017'

我无法测试,但这似乎是一种复杂的写作方式:

TO_CHAR(DB2_RID, 'MM/YYYY') 

@Dnoeth没有解释您的SQL代码部分。它可以由

VARCHAR_FORMAT(DB2_RID, 'MM/YYYY')

我不知道为什么字符(10)被设置为10。另一位不在这里工作的分析师创建了语法,我试图解释它的含义。我将尝试您提供的语法,并让您知道结果是什么。谢谢。我尝试了你的语法,收到了这个错误:BIC00004。DAL01008。访问数据库时出错。格式字符串%m/%y对于TO\u CHAR函数无效。SQLCODE=-20447,SQLSTATE=22007,DRIVER=4.17.29;游标SQL_CURLH200C1未处于准备状态。SQLCODE=-514,SQLSTATE=26501,DRIVER=4.17.29。我将语法调整为-to_CHAR(DB2_RID,'MM/YYYY'),得到了预期的结果。感谢您提供此解决方案!顺便说一句,对年和月进行编码的更常见方法是
'2018/12'
'201812'
,即允许排序和筛选的前导年。或者存储为整数
210812
=
year(DB2\u-RID)*100+month(DB2\u-RID)