无法在 UNION 的第二个 Select 列表中显示正确的日期格式
Unable to Display Correct Date Format in 2nd Select list of UNION
我有一个来自两个 table 的简单查询 UNION ALL。我发现我的第二个 table 的几个列在应该有数据的地方是空白的,并且日期显示为整数(您可以在其中辨别日期,但在 YYMMDD 中以“1”开头)。我已将此问题的查询缩短为六列以开始。我还确保数据类型正确,甚至将 '' 更改为 NULL,反之亦然,只是为了得到错误。这是查询:
SELECT
PRIMARY_SERVICE_DATE AS "Common Date"
,'P' AS "Claim Type"
,PRI_MEMB_ID AS "Member ID"
,PRIMARY_SERVICE_DATE AS "Primary Service Date"
,NULL AS "Admit Date"
,NULL AS "Discharge Date"
FROM MAINDB.TABLECLAIMS
WHERE
PRI_MEMB_ID IN ('99999')
UNION ALL
SELECT
ADMIT_DATE AS "Common Date"
,'' AS "Claim Type"
,CAST(MEMBER_ID AS BIGINT) AS "Member ID"
,NULL AS "Primary Service Date"
,ADMIT_DATE AS "Admit Date"
,DISCHARGE_DATE AS "Discharge Date"
FROM MAINDB.TABLESCLAIMSSUMMARY
WHERE ADMIT_DATE between '2016-01-01' and '2020-12-31'
AND CAST(MEMBER_ID AS BIGINT) IN ('99999')
这张图片link显示了结果以及我需要如何显示。
enter image description here
在 Teradata 中,UNION [ALL] 中的第一个查询确定结果的数据类型,在这种情况下,NULL 被视为 INTEGER,因此第二个查询的日期隐式转换为 INTEGERDATE 形式 (CYYMMDD) .每当您的第一个查询包含常量值时,您应该 CAST 为预期的结果数据类型。 (此外,当数据类型或长度不同时,您可能需要在第一个查询中显式转换结果以确保按预期返回值。)
SELECT
PRIMARY_SERVICE_DATE AS "Common Date"
,CAST('P' AS CHAR(1)) AS "Claim Type"
,PRI_MEMB_ID AS "Member ID"
,PRIMARY_SERVICE_DATE AS "Primary Service Date"
,CAST(NULL AS DATE) AS "Admit Date"
,CAST(NULL AS DATE) AS "Discharge Date"
FROM MAINDB.TABLECLAIMS
WHERE
PRI_MEMB_ID IN ('99999')
…
尽管将 Excel 格式化为 DateTime,但我假设您希望结果为 DATE。
如果你想要 TIMESTAMP(0) 那么你应该在第一个查询中 CAST 所有 3 个日期。
我有一个来自两个 table 的简单查询 UNION ALL。我发现我的第二个 table 的几个列在应该有数据的地方是空白的,并且日期显示为整数(您可以在其中辨别日期,但在 YYMMDD 中以“1”开头)。我已将此问题的查询缩短为六列以开始。我还确保数据类型正确,甚至将 '' 更改为 NULL,反之亦然,只是为了得到错误。这是查询:
SELECT
PRIMARY_SERVICE_DATE AS "Common Date"
,'P' AS "Claim Type"
,PRI_MEMB_ID AS "Member ID"
,PRIMARY_SERVICE_DATE AS "Primary Service Date"
,NULL AS "Admit Date"
,NULL AS "Discharge Date"
FROM MAINDB.TABLECLAIMS
WHERE
PRI_MEMB_ID IN ('99999')
UNION ALL
SELECT
ADMIT_DATE AS "Common Date"
,'' AS "Claim Type"
,CAST(MEMBER_ID AS BIGINT) AS "Member ID"
,NULL AS "Primary Service Date"
,ADMIT_DATE AS "Admit Date"
,DISCHARGE_DATE AS "Discharge Date"
FROM MAINDB.TABLESCLAIMSSUMMARY
WHERE ADMIT_DATE between '2016-01-01' and '2020-12-31'
AND CAST(MEMBER_ID AS BIGINT) IN ('99999')
这张图片link显示了结果以及我需要如何显示。 enter image description here
在 Teradata 中,UNION [ALL] 中的第一个查询确定结果的数据类型,在这种情况下,NULL 被视为 INTEGER,因此第二个查询的日期隐式转换为 INTEGERDATE 形式 (CYYMMDD) .每当您的第一个查询包含常量值时,您应该 CAST 为预期的结果数据类型。 (此外,当数据类型或长度不同时,您可能需要在第一个查询中显式转换结果以确保按预期返回值。)
SELECT
PRIMARY_SERVICE_DATE AS "Common Date"
,CAST('P' AS CHAR(1)) AS "Claim Type"
,PRI_MEMB_ID AS "Member ID"
,PRIMARY_SERVICE_DATE AS "Primary Service Date"
,CAST(NULL AS DATE) AS "Admit Date"
,CAST(NULL AS DATE) AS "Discharge Date"
FROM MAINDB.TABLECLAIMS
WHERE
PRI_MEMB_ID IN ('99999')
…
尽管将 Excel 格式化为 DateTime,但我假设您希望结果为 DATE。 如果你想要 TIMESTAMP(0) 那么你应该在第一个查询中 CAST 所有 3 个日期。