在AS400中将日期转换为char

时间:2010-10-28 17:05:23

标签: sql ibm-midrange

我正在尝试将当前日期 - 2个月转换为格式yyyymmdd并从中减去1900000。

Oracle对我来说很容易

SELECT  TO_CHAR(ADD_MONTHS(SYSDATE,-2),'YYYYMMDD') - 19000000 FROM DUAL 

有人建议我使用 AS400

提前致谢。

5 个答案:

答案 0 :(得分:2)

应该这样做:

select char(((year(d)-1900) * 100 + month(d)) * 100 + day(d))    
from (select (curdate() - 2 months) as d from sysibm/sysdummy1) s

或者如果你喜欢在没有嵌套选择的情况下做同样的事情:

select char(((year(curdate() - 2 months) - 1900) * 100 
        + month(curdate() - 2 months)) * 100 
        + day(curdate() - 2 months))   
from sysibm/sysdummy1

干杯

答案 1 :(得分:1)

最简单的可能是:

SELECT DEC(REPLACE(CHAR(CURDATE() - 2 MONTHS,ISO),'-',''))-19000000 FROM SYSIBM/SYSDUMMY1

有些想法可能会更好地挖掘出一些东西。但无论如何都不会变得更简单。

答案 2 :(得分:0)

选择       DEC(SUBSTR(CHAR(日期(现在()) - 2个月),ISO),1,4)||       SUBSTR(CHAR(日期(现在()) - 2个月),ISO),6,2)||       SUBSTR(CHAR(日期(现在()) - 2个月),ISO),9,2),8,0) - 19000000     来自双重

答案 3 :(得分:0)

这是一个迟到的答案,但应该这样做:)

select char((year(curdate() - 2 months) * 100          
    + month(curdate() - 2 months)) * 100           
    + day(curdate() - 2 months))                   
from sysibm/sysdummy1                                  

这与karol.mlot的答案几乎相同,但是,因为您要求YYYYMMDD

,您将获得正确的格式

答案 4 :(得分:-1)

EVAL numericField = %dec(%date(alphaDate:*MDY/):*MDY)

char字段后面的parm必须是char字段的格式(我使用* MDY和“/”作为示例)。

表达式末尾的parm必须是数字字段的格式。 因此,此示例将11/22/2008转换为11222008。

如果您希望2008-11-22转换为20081122,请同时制作两个参数* ISO。