#oracle #teradata
#Oracle #teradata
Вопрос:
Мне нужна помощь с преобразованием приведенного ниже SQL-запроса в Taradata в Oracle exadata. Не уверен, как преобразовать дату, я изменил функцию приведения даты На_Date, но получаю несколько ошибок.
SELECT DISTINCT
pat.pat_id,
pat.pat_mrn_id AS patientmrn,
pat.pat_name AS patientname,
adt_pat_class_c,
pat.death_date AS deathdate,
cast(patenc.hosp_admsn_time AS DATE format 'mm/dd/yyyy') AS
admitdate,
cast(patenc.hosp_disch_time AS DATE format 'mm/dd/yyyy') AS
dischargedate,
extract(year FROM acct.adm_date_time)-extract(year FROM
pat.birth_date) - CASE WHEN acct.adm_date_time (format
'MMDD')CHAR(4))
<pat.birth_date (format 'MMDD') (CHAR(4)) THEN 1 ELSE 0
END AS patage,
adt_billing_type_c,
adt_patient_stat_c,
hosp_admsn_type_c,
acct_basecls_ha_c,
ordproc.order_proc_id AS order_id,
ordproc.ordering_date
FROM patient pat
inner join pat_enc_hsp patenc ON pat.pat_id = patenc.pat_id
inner join hsp_account acct ON acct.prim_enc_csn_id = patenc.pat_enc_csn_id
inner join order_proc ordproc ON acct.prim_enc_csn_id ON
ordproc.pat_enc_csn_id
inner join clarity_ser ser ON ser.prov_id = ordproc.authrzing_prov_id
inner join identity_ser_id idser ON ser.prov_id=idser.prov_id
inner join clarity_loc loc ON loc.loc_id = acct.loc_id
inner join zc_loc_rpt_grp_7 grp7 ON loc.rpt_grp_seven = grp7.rpt_grp_seven
WHERE grp7.name = 'AB'
AND cast(patenc.hosp_disch_time AS DATE format 'mm/dd/yyyy') >= '01/01/2019'
AND admit_conf_stat_c IN (1,4)
AND description LIKE '%CULTURE%'
AND ordproc.lab_status_c = 3
AND adt_pat_class_c IN ('1204','12113')
AND result_time > patenc.hosp_disch_time;
Я изменил верхнюю часть запроса (ту, в которой указаны даты) —
select distinct
pat.pat_id,
pat.PAT_MRN_ID as PatientMRN,
pat.PAT_NAME as PatientName,
ADT_PAT_CLASS_C,
pat.DEATH_DATE as DeathDate,
TO_DATE(patenc.HOSP_ADMSN_TIME, 'mm/dd/yyyy') as AdmitDate,
TO_DATE(patenc.HOSP_DISCH_TIME, 'mm/dd/yyyy') as DischargeDate----
Я получаю следующие ошибки —
ORA-12801: ошибка, сигнализируемая на параллельном сервере запросов P02G, экземпляр nzcladb01xm.nndc.kp.org: CDB001N41 (1)
ORA-01843: неверный месяц
12801. 00000 — «ошибка, о которой сигнализирует сервер параллельных запросов % s»
* Причина: сервер параллельных запросов достиг состояния исключения.
* Действие: Проверьте причину следующего сообщения об ошибке и обратитесь к
ваше руководство по исправлению ошибок для соответствующего действия.
* Комментарий: Эта ошибка может быть устранена с помощью события 10397, в котором
вместо этого выдается фактическая ошибка сервера.
Комментарии:
1. Какие ошибки вы получили? И какой запрос вам удалось получить на данный момент?
2. Спасибо, что спросили. Я получаю следующие ошибки — ORA-12801: ошибка, сигнализируемая на сервере параллельных запросов P02G, экземпляр nzcladb01xm.nndc.kp.org: CDB001N41 (1) ORA-01843: недопустимый месяц 12801. 00000 — «ошибка, сигнализируемая на сервере параллельных запросов % s» * Причина: сервер параллельных запросов достиг состояния исключения. * Действие: Проверьте причину следующего сообщения об ошибке и обратитесь к руководству по исправлению ошибок для соответствующего действия. * Комментарий: Эту ошибку можно отключить с помощью события 10397, и в этом случае вместо этого выдается сигнал о фактической ошибке сервера.
3. Я изменил верхнюю часть запроса (ту, в которой указаны даты) — выберите отдельный pat.pat_id, pat. PAT_MRN_ID как PatientMRN, pat. PAT_NAME как PatientName, ADT_PAT_CLASS_C, pat. ДАТА СМЕРТИ как DeathDate, TO_DATE(patenc.HOSP_ADMSN_TIME, ‘мм/ дд/гггг’) как AdmitDate, TO_DATE (patenc.HOSP_DISCH_TIME, ‘мм / дд/гггг’) как DischargeDate,
4. Определенно существует несоответствие между значением столбца и форматом даты, о чем свидетельствует ошибка ‘ORA-01843: неверный месяц’. Пожалуйста, проверьте еще раз значения в таблице и все ли они соответствуют заданному формату. Кроме того, у вас есть преобразование даты в вашем предложении ‘where’ и извлечение в списке выбрать столбцы. Проверьте их также, удалите эти преобразования и попробуйте выполнить свой запрос снова.
5. Есть еще одна часть, связанная с вычислением даты,
patage
, это странное вычисление возраста, вероятно, в Oracletrunc(months_between(acct.adm_date_time, pat.birth_date))