Sql 在DB2中以YYYYMM格式格式化日期

Sql 在DB2中以YYYYMM格式格式化日期,sql,db2,Sql,Db2,我从下表中以字符串形式获取日期,格式如下: 2014-09-02 这是YYYY-MM-DD格式 查询是: SELECT VALUE FROM MYSCHEMA.MYTABLE WHERE CODE = 'MYDATE' 我想修改上述查询,使结果为: 201402 我尝试了这个,但格式不正确: select char(year(date(value))) || char(month(date(value))) from MYSCHEMA.MYTABLE WHERE CODE = 'MYDA

我从下表中以字符串形式获取日期,格式如下:

2014-09-02 
这是YYYY-MM-DD格式

查询是:

SELECT VALUE FROM MYSCHEMA.MYTABLE WHERE CODE = 'MYDATE'
我想修改上述查询,使结果为:

201402
我尝试了这个,但格式不正确:

select char(year(date(value))) || char(month(date(value))) from MYSCHEMA.MYTABLE WHERE CODE = 'MYDATE'
结果如下:

 1            
------------ 
2014       9 

我随身携带着DB29.5

如果所有字符串的格式都完全相同,为什么不用REPLACE()删除破折号,然后抓取一个子字符串,如下所示:

SELECT SUBSTR(REPLACE(VALUE,'-',''),1,6) FROM MYSCHEMA.MYTABLE WHERE CODE='MY DATE'

此外,正如Dan所说,在您的示例中,您只选择了年和日,但我从代码中假设您想要年和月。

如果所有字符串都将采用完全相同的格式,为什么不使用REPLACE()删除破折号,然后抓取一个子字符串,如下所示:

SELECT SUBSTR(REPLACE(VALUE,'-',''),1,6) FROM MYSCHEMA.MYTABLE WHERE CODE='MY DATE'

此外,正如Dan所说,在您的示例中,您只选择了年和日,但我从您的代码中假设您想要年和月。

如果您实际获得了日期数据类型(即使您没有,在ISO格式中,DB2也应该足够聪明,能够自动转换它),然后可以使用标量函数:

SELECT VARCHAR_FORMAT(VALUE, 'YYYYMM')
FROM MYSCHEMA.MYTABLE
WHERE CODE = 'MYDATE'

如果您实际上获得了一个
日期
数据类型(即使不是,在ISO格式中,DB2应该足够聪明,可以自动转换),那么您可以使用标量函数:

SELECT VARCHAR_FORMAT(VALUE, 'YYYYMM')
FROM MYSCHEMA.MYTABLE
WHERE CODE = 'MYDATE'

如果它已经是一个字符串,如果您可以使用
SUBSTR()
,为什么还要麻烦将它转换为
DATE
?无论如何,请尝试在两个
CHAR()
调用周围添加
TRIM()
。您得到的值似乎代表2014年9月2日。你说你想要的那个似乎代表了2014年2月。您确定吗?您还没有选择答案,您找到解决方案了吗?如果它已经是一个字符串,如果您可以使用
SUBSTR()
,为什么还要麻烦将其转换为
DATE
?无论如何,请尝试在两个
CHAR()
调用周围添加
TRIM()
。您得到的值似乎代表2014年9月2日。你说你想要的那个似乎代表了2014年2月。你确定吗?你还没有选择答案,你找到解决方案了吗?找到了吗?