将 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 中的字段类型不同,需要根据实际情况进行调整。

SQL Server 到 Oracle 数据迁移:日期字段转换

原文地址: https://www.cveoy.top/t/topic/qksf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录