2016-06-24 2 views
0

Я пытаюсь использовать скрипты select, чтобы извлечь столбец дня недели из таблицы в базе данных. И разделение «MWF» на «понедельник», «среда» и «пятница». Каждый день нужно отображать в отдельной строке.SQL Search refresh by row

То, что я здесь:

SELECT 
    REGEXP_SUBSTR(MEETING_DAY, '[^,]+', 1, LEVEL, 'i'), FROM_TIME_HHIIAP as DAY 
FROM 
    (SELECT 
     CASE WHEN (DAY_MEET.MEETING_DAYS = 'F')THEN ('Friday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'FS')THEN ('Friday,Saturday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'M')THEN ('Monday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'MF')THEN ('Monday,Friday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'MT')THEN ('Monday,Tuesday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'MTH')THEN ('Monday,Thursday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'MTTH')THEN ('Monday,Tuesday,Thursday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'MTW')THEN ('Monday,Tuesday,Wednesday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'MTWTH')THEN ('Monday,Tuesday,Wednesday,Thursday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'MTWTHF')THEN ('Monday,Tuesday,Wednesday,Thursday,Friday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'MW')THEN ('Monday,Wednesday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'MWF')THEN ('Monday,Wednesday,Friday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'MWTH')THEN ('Monday,Wednesday,Thursday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'S')THEN ('Saturday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'T')THEN ('Tuesday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'TH')THEN ('Thursday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'THF')THEN ('Thursday,Friday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'TTH')THEN ('Tuesday,Thursday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'TTHF') THEN ('Tuesday,Thursday,Friday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'TW')THEN ('Tuesday,Wednesday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'TWTH')THEN ('Tuesday,Wednesday,Thursday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'W')THEN ('Wednesday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'WF')THEN ('Wednesday,Friday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'WTH')THEN ('Wednesday,Thursday') 
      WHEN (DAY_MEET.MEETING_DAYS = 'WTHF')THEN ('Wednesday,Thursday,Friday') 
      ELSE ('Unknown') 
     END MEETING_DAY, 
     DAY_MEET.* 
    FROM 
     UTDBA.IS_167_DAY12_MEETING_INFO DAY_MEET) 

CONNECT BY LEVEL <= 
      LENGTH(MEETING_DAY) - LENGTH(REGEXP_REPLACE(MEETING_DAY, ',', ''))+1; 

Но кажется, что LEVEL остается на последнем символе после первого ряда, так что результат не так. Кто-нибудь знает, как обновить уровень до первого слова для каждой строки?

+1

Отметьте свой вопрос в базе данных, в которой вы используете (что я предполагаю, это Oracle). –

ответ

0

Хммм. Вы можете сделать это с помощью join:

select mi.*, d.name 
from (select mi.*, 
      replace(mi.meeting_days, 'TH', 'X') as meeting_days_x -- do something about Thursday 
     from UTDBA.IS_167_DAY12_MEETING_INFO mi 
    ) mi join 
    (select 'M' as abbrev, 'Monday' as name from dual union all 
     select 'T' as abbrev, 'Tuesday' as name from dual union all 
     select 'W' as abbrev, 'Wednesday' as name from dual union all 
     select 'X' as abbrev, 'Thursday' as name from dual union all 
     select 'F' as abbrev, 'Friday' as name from dual union all 
     select 'S' as abbrev, 'Saturday' as name from dual 
    ) d 
    on mi.meeting_days_x like '%' || d.abbrev || '%'; 
+0

Спасибо, я пробовал это на Oracle Developer, но он показывает ошибку: ORA-00904: «MI». «MEETING_DAY»: недопустимый идентификатор 00904. 00000 - «% s: недопустимый идентификатор» * Причина: * Действие : Ошибка на линии: 3 Колонка: 22 – Shaw

+0

@Shaw. , , Это была опечатка. Имя вашей колонки во множественном числе. –

+0

Теперь он работает, спасибо вам большое. – Shaw