Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyszukaj wartość w kolumnie wartości, która przechowuje wartości oddzielone przecinkami

Konfiguracja Oracle :

<> TWÓRZ LUB ZAMIEŃ FUNKCJĘ split_String( i_str IN VARCHAR2, i_delim IN VARCHAR2 DEFAULT ',') RETURN SYS.ODCIVARCHAR2LIST DETERMINISTICAS p_result SYS.ODCIVARCHAR2LIST :=SYS.ODCIVARCHAR2LIST(); p_start LICZBA(5) :=1; p_end NUMER(5); c_len STAŁA LICZBA(5) :=DŁUGOŚĆ( i_str ); c_ld STAŁA LICZBA(5) :=DŁUGOŚĆ( i_delim );BEGIN JEŻELI c_len> 0 TO p_end :=INSTR( i_str, i_delim, p_start ); PODCZAS p_end> 0 PĘTLA p_result.EXTEND; p_result( p_result.COUNT ) :=SUBSTR( i_str, p_start, p_end - p_start ); p_start :=p_koniec + c_ld; p_end :=INSTR( i_str, i_delim, p_start ); PĘTLA KOŃCOWA; JEŻELI p_start <=c_len + 1 TO p_result.EXTEND; p_result( p_result.COUNT ) :=SUBSTR( i_str, p_start, c_len - p_start + 1 ); KONIEC JEŚLI; KONIEC JEŚLI; RETURN p_result;END;/CREATE TABLE xyz ( weekend_dni ) ASSELECT 'SOBOTA, NIEDZIELA' FROM DUAL;CREATE TABLE abc ( act_date ) ASSELECT DATE '2016-02-02' FROM DUAL UNION ALLSELECT DATE '2016-02-06' FROM DUAL;

Zapytanie

 SELECT data_czynna, CASE WHEN w.dzień_weekendu JEST NULL THEN 0 ELSE 1 END AS flaga_weekenduFROM abc a LEFT OUTER JOIN ( SELECT t.column_value AS dzień_weekendu FROM xyz x, TABLE( split_String( x.dni_weekendu )) ) t . w ON TRIM( TO_CHAR( a.ACT_DATE, 'DAY') ) =w.Weekend_day; 

Wyjście :

ACT_DATE WEEKEND_FLAG--------- ------------06-LUTY-16 1 02-LUTY-16 0  

Zapytanie alternatywne :

SELECT data_czynna, CASE WHEN INSTR( x.weekend_days, TRIM( TO_CHAR( data_czynna, 'DZIEŃ' ) ) )> 0 THEN 1 ELSE 0 END AS weekend_flagFROM abc a CROSS JOIN xyz x; 

Da to ten sam wynik i będzie działać dla nazw dni, ale nie zadziała w przypadku ogólnym, ponieważ możesz uzyskać fałszywe pozytywne dopasowanie do podłańcucha.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę utworzyć kopię tabeli Oracle bez kopiowania danych?

  2. praca z json w Oracle

  3. Uzyskanie wyjątku ORA-00942:tabela lub widok nie istnieje - podczas wstawiania do istniejącej tabeli

  4. Jak porównać dwie tabele kolumna po kolumnie w Oracle?

  5. Dodaj 2 miesiące do aktualnej sygnatury czasowej