在此查询中,IBM I上的字段UAFLWD被定义为数字8 0.它实际上是一个日期字段YYYYMMDD。下面的代码将格式更改为STRING,现在名为FOLLOWUP。 实际上我希望这是NUMBER,因为在报告工具中,我想只包括date =到当前日期和之前的日期。如何将此FOLLOWUP定义为数字?
SELECT
ALL T01.UAUSRN,
SUBSTR(DIGITS(UAFLWD),5,2) CONCAT '/' CONCAT SUBSTR(DIGITS(UAFLWD)
,7,2) CONCAT '/' CONCAT SUBSTR(DIGITS(UAFLWD),3,2) AS FOLLOWUP,
(T01.UAENT#), T01.UASFX#, T02.ADENTN, T01.UANOTT, T01.UANOTL, T02.ADLNM, T02.ADFNM,
T01.UAFLWD
FROM ASTDTA.NOTEHDUA T01 INNER JOIN
ASTDTA.ADRESsad T02
ON UAENT# = ADENT#
AND UASFX# = ADSFX#
WHERE UAFLWD BETWEEN 20000101 AND 20991231
AND UAPRGD < 1
AND UANOTT = 'E'
ORDER BY 001 ASC, 008 ASC
答案 0 :(得分:1)
你到底想要什么?根据你的问题,它已经是数字,所以只需选择它而不进行任何转换:
SELECT
ALL T01.UAUSRN, UAFLWD AS FOLLOWUP,
(T01.UAENT#), T01.UASFX#, T02.ADENTN, T01.UANOTT, T01.UANOTL, T02.ADLNM, T02.ADFNM,
T01.UAFLWD
FROM ASTDTA.NOTEHDUA T01 INNER JOIN
ASTDTA.ADRESsad T02
ON UAENT# = ADENT#
AND UASFX# = ADSFX#
WHERE UAFLWD BETWEEN 20000101 AND 20991231
AND UAPRGD < 1
AND UANOTT = 'E'
ORDER BY 001 ASC, 008 ASC
编辑我刚刚注意到UAFLWD已经包含在选择列表中而没有在示例SQL中进行转换。
答案 1 :(得分:0)
首先想到的是使用cast()
:
SELECT
ALL T01.UAUSRN,
CAST(SUBSTR(DIGITS(UAFLWD),5,2) CONCAT SUBSTR(DIGITS(UAFLWD),7,2) CONCAT
SUBSTR(DIGITS(UAFLWD),3,2) AS INTEGER
) AS FOLLOWUP,
(T01.UAENT#), T01.UASFX#, T02.ADENTN, T01.UANOTT, T01.UANOTL, T02.ADLNM, T02.ADFNM,
T01.UAFLWD
这是否可以解决您的问题?