2013-05-28 4 views
0

Я использую следующий запрос:строка на Oracle SQL запрос

SELECT 
    CURRENT_AFFAIRS_ID, 
    IMPORTANT_EXAM 
FROM CURRENT_AFFAIRS_LANGUAGE 
WHERE CURRENT_AFFAIRS_ID IN (
    1362544236, 
    1363764599, 
    1363670667, 
    1363516827, 
    1363500146) 
AND IMPORTANT_EXAM IS NOT NULL 
AND IS_ACTIVE = 1 
AND IS_DELETED = 0 

отображать следующие данные:

1363764599 Civil Services Exam, SSC Exams 
1363670667 Bank Exams, SSC Exams 
1363516827 Bank Exams, Civil Services Exam, SSC Exams 
1363500146 Civil Services Exam, SSC Exams 

Мое требование подсчитать количество вхождений строки, разделенных запятой (например. Экзамен по гражданским услугам)

Я попытался сделать это с помощью java-кодирования.

Но это кажется слишком сложной работой.

Можно ли использовать любую функцию oracle или на стороне базы данных?

+1

Как далеко вы добрались до Java? – heikkim

ответ

3

С 11g вы можете попробовать REGEXP_COUNT

SELECT 
    CURRENT_AFFAIRS_ID, 
    IMPORTANT_EXAM , 
    regexp_count(IMPORTANT_EXAM , '[^,]+') 
FROM CURRENT_AFFAIRS_LANGUAGE 
WHERE CURRENT_AFFAIRS_ID IN (
    1362544236, 
    1363764599, 
    1363670667, 
    1363516827, 
    1363500146) 
AND IMPORTANT_EXAM IS NOT NULL 
AND IS_ACTIVE = 1 
AND IS_DELETED = 0 

Here is a sqlfiddle demo

1

Как быстро и грязный вариант вы можете использовать regexp_replace вырезать все в строке, кроме запятых, считай тех, и добавьте , Это предполагает, что строка хорошо сформирована.

SELECT 
    CURRENT_AFFAIRS_ID, 
    IMPORTANT_EXAM, 
    LENGTH(regexp_replace(IMPORTANT_EXAM, '[^,]', '')) + 1 AS EXAMS 
FROM CURRENT_AFFAIRS_LANGUAGE 
WHERE CURRENT_AFFAIRS_ID IN (
    1362544236, 
    1363764599, 
    1363670667, 
    1363516827, 
    1363500146) 
AND IMPORTANT_EXAM IS NOT NULL 
AND IS_ACTIVE = 1 
AND IS_DELETED = 0; 

SQL Fiddle.

Редактировать: если вы на 11g, то regexp_count еще лучше, так как показывает A.B.Cade - используйте это, если сможете. Этот вариант regexp_replace будет работать от 10 г, поэтому я оставлю его здесь на данный момент ...

Я не уверен, почему вы храните несколько значений в одной строке. Вы должны перенести экзамены в отдельную таблицу, а затем иметь таблицу сопоставления, которая показывает, какие экзамены доступны на каких языках.

Смежные вопросы