SQL Server 到 Oracle 数据迁移:日期字段转换
将 SQL Server 中的查询语句迁移到 Oracle 数据库时,需要考虑数据类型转换的问题。尤其是日期字段,SQL Server 和 Oracle 对日期类型的处理方式不同。
在该 SQL Server 语句中,使用了 case when year(DE06_00_234_00)='1900' then '' else [DE06_00_234_00] end 语句来判断日期字段是否为 1900 年,如果是则返回空字符串,否则返回日期字段的值。
然而,在 Oracle 中,year() 函数无法直接作用于日期字段,需要使用 EXTRACT(YEAR FROM DE06_00_234_00) 来获取日期的年份。同时,Oracle 中的日期类型不能直接转换为字符串,需要使用 TO_CHAR() 函数进行转换。
以下是修改后的 Oracle 查询语句:
SELECT
[LOCAL_ID],
[BUSINESS_ID],
[BASIC_ACTIVE_ID],
REPLACE(REPLACE(REPLACE(TO_CHAR(DATAGENERATE_DATE, 'YYYY-MM-DD HH24:MI:SS'), '-', ''), ' ', ''), ':', '') AS DATAGENERATE_DATE,
[ORGANIZATION_CODE],
[ORGANIZATION_NAME],
[UNIQUEID],
[DATA_STATE],
[DE02_01_039_001],
[DE02_01_040_00],
[CT02_01_040_01],
[DE02_01_026_01],
[DE02_01_032_02],
[DE01_00_014_01],
[DE02_10_090_01],
[DE08_10_054_01],
[DE01_00_019_01],
[DE01_00_026_01],
[WS01_00_903_01],
[WS01_00_904_01],
[WS01_00_907_01],
[DE06_00_286_00],
[CT06_00_286_01],
[DE06_00_289_00],
[CT06_00_289_01],
[WS06_00_288_01],
[CT06_00_288_01],
[DE06_00_288_00],
[WS06_00_900_01],
[WS08_50_025_01],
[CT08_50_025_01],
[WS08_50_923_01],
[CT08_50_923_01],
[DE08_50_043_00],
[DE08_50_011_00],
[CT08_50_011_01],
[DE06_00_134_00],
[CT06_00_134_01],
[DE08_50_047_00],
[WS08_50_937_01],
[WS06_00_133_02],
[CT08_50_931_02],
[WS08_50_931_02],
[DE08_50_023_00],
[DE06_00_135_00],
[DE08_50_024_00],
[DE06_00_133_01],
[CT06_00_133_01],
[WS04_50_900_02],
[WS08_50_900_01],
[DE06_00_179_01],
[DE06_00_220_01],
[AP02_01_038_16],
[DE02_01_039_014],
[DE06_00_222_01],
[DE06_00_219_00],
[DE06_00_205_00],
[AP02_01_038_29],
[DE02_01_039_015],
[DE06_00_222_02],
[AP06_00_200_00],
[AP02_01_038_17],
[DE02_01_039_016],
[DE06_00_218_02],
[AP02_01_038_53],
[DE02_01_039_017],
[WS02_01_039_018],
[WS06_00_914_01],
[WS02_01_039_019],
[WS06_00_915_01],
CASE WHEN EXTRACT(YEAR FROM DE06_00_234_00) = 1900 THEN '' ELSE TO_CHAR(DE06_00_234_00, 'YYYY-MM-DD') END AS DE06_00_234_00,
[DE02_01_039_020],
[DE06_00_147_00],
[AP06_00_003_00],
[AP06_00_197_00],
[DE08_10_025_10],
[CT08_10_025_10],
[DE08_10_025_11],
[CT08_10_025_11],
[DE08_10_052_01],
[CT08_10_052_01],
[WS99_99_900_01],
[WS99_99_901_02],
[WS99_99_902_03],
[WS99_99_903_04]
FROM
[dbo].HDI_DRUREC_INFO
这样,你就可以将查询结果从 SQL Server 传输到 Oracle,并正确处理日期字段。
注意: 以上示例中,假设 DE06_00_234_00 字段在 Oracle 数据库中也为 DATE 类型。如果 Oracle 中的字段类型不同,需要根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/qksf 著作权归作者所有。请勿转载和采集!