如何将序号日期更改为 MMDDYYYY

How to change Ordinal Date to MMDDYYYY

我有一个 SQL 字符串,用于转换存储在服务器上的序号日期,但是当我将字符串添加到 VBA 时,我得到 Run Time Error that the Column or global variable doesn't exist.

当我在 Microsoft Query 中使用该字符串时,它工作得很好。请注意我几乎不知道 SQL.

这是我用来从 YYYYDD 转换为 MMDDYYYY 的 SQL 字符串 decimal(replace(char(date(timestamp_format(digits(CFMAST.CFDOB7),'YYYYDDD')),usa),'/',''),8,0)

下面是我如何将它实现到 VBA 中,用于 Excel

strSQL="SELECT decimal(replace(char(date(timestamp_format(digits(CFMAST.CFDOB7),'YYYYDDD')),usa),'/',''),8,0) FROM CNCTTP08.JHADAT842.CFMAST "

strSQL = strSQL & " WHERE (CFMAST.CFDOB7<>0) AND (CFMAST.CFDOB7<>1800001)"

当我 运行 通过 Microsoft Query 进行查询时,我得到了预期的结果,它格式化了 CFMAST.CFDOB7 as MMDDYYYY 中的所有日期,但是当我 运行 [=14] 中的字符串时=] 我收到以下错误:

[IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0206 - Column or global variabl CFDOB7 not found.

问题可能是您为 table CNCTTP08.JHADAT842.CFMAST 使用了由三部分组成的名称。删除系统名称 CNCTTP08 并仅使用架构和 table JHADAT842.CFMAST。您的 ODBC 连接应该可以让您进入正确的系统。

另一个问题可能是 DB2 for i 并不真正喜欢相关名称,除非已明确定义相关名称。因此,如果您确实需要三部分名称,请在 from 子句中添加相关标识符,如下所示:

FROM CNCTTP08.JHADAT842.CFMAST AS CFMAST

尝试在 FROM 子句中使用别名,例如 "FROM CNCTTP08.JHADAT842.CFMAST T01" 并使用 T01 替换 CFMAST

strSQL="SELECT decimal(replace(char(date(timestamp_format(digits(T01.CFDOB7),'YYYYDDD')),usa),'/',''),8,0) FROM CNCTTP08.JHADAT842.CFMAST T01"

strSQL = strSQL & " WHERE (T01.CFDOB7<>0) AND (T01.CFDOB7<>1800001)"

告诉我你得到了什么。