Advertisement
Guest User

Untitled

a guest
Sep 9th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. WITH t AS
  2.           (SELECT case_id, srv_rendered_id, service_id, step_id, unnest(string_to_array(str_zn,';')) as str_zn
  3.            FROM tmp_protocol
  4.            WHERE code='ONKO_surgery_type'
  5.            ), w AS (
  6.            SELECT case_id, srv_rendered_id, service_id, step_id, str_zn,
  7.                   position('Код услуги: ' in str_zn)+12 as pos_a, position('Тип хирургического лечения: ' in str_zn)-2 as pos_b FROM t
  8.            WHERE trim(str_zn) <> ''
  9.            ), v as (
  10.            SELECT
  11.             case_id, srv_rendered_id, service_id, step_id, str_zn,substring(str_zn from pos_a for pos_b - pos_a) as code_old,
  12.             replace(substring(str_zn from pos_a for pos_b - pos_a),'.','') as code_new 
  13.            FROM w
  14.            ), z AS (
  15.            SELECT case_id, srv_rendered_id, service_id, step_id, replace(str_zn,code_old,code_new) as str_zn, code_old FROM v
  16.            ), sv AS (
  17.            SELECT case_id, srv_rendered_id, str_zn, position('.' in str_zn) as pos1, position('Тип хирургического лечения: ' in str_zn) as pos2,
  18.                   position('Противопоказание или отказ: ' in str_zn) as pos3, position('Дата противопоказания или отказа: ' in str_zn) as pos4,
  19.                   position('Код услуги: ' in str_zn) as pos5, position(',' in str_zn) as pos6,
  20.                   service_id, step_id, code_old
  21.            FROM z          
  22.           )
  23.         SELECT case_id, step_id, srv_rendered_id, service_id, 'OnkoProt', CASE substring(str_zn,pos3+28,1) WHEN '1' THEN '1' WHEN '2' THEN '4' END ,
  24.         CASE WHEN pos4>0 THEN to_Date(substring(str_zn,pos4+34,10),'dd.mm.yyyy') ELSE null::date END, null
  25.         FROM sv
  26.         WHERE pos3>0
  27.         UNION ALL
  28.         SELECT case_id, step_id, srv_rendered_id, service_id, 'OnkoTip', '1'||substring(str_zn,pos2+28,pos1-pos2-28),null::date,
  29.         CASE WHEN pos5>0 THEN hstore('onk_usl_code',code_old) ELSE null END
  30.         FROM sv
  31.         WHERE pos2>0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement