2016-06-22 5 views
0

У меня есть таблица, которая содержит сведения обо всех таблицах, присутствующих в конкретной схеме. Имя таблицы: "all_tables". Существует столбец с именем table_name, который содержит имя всех таблиц.Невозможно выбрать последнее имя таблицы из таблицы all_tables

У меня есть таблица с именем "SBC_RAO_INDEX_30_05_2016_04_99". Здесь "30_05_2016_04_99" - дата с отметкой времени. Как мудрый у меня есть таблицы с разными отметками времени, как показано ниже.

SBC_RAO_INDEX_30_05_2016_04_99, 
    SBC_RAO_INDEX_31_05_2016_04_99, 
    SBC_RAO_INDEX_01_06_2016_04_99, 
    SBC_RAO_INDEX_02_06_2016_04_99, 
    SBC_RAO_INDEX_03_06_2016_04_99 

Я пытаюсь извлечь последнюю имя таблицы из ALL_TABLES, используя ниже запроса:

select * 
from all_tables 
WHERE table_name like 'SBC_RAO_INDEX%' 
and table_name not like 'SBC_RAO_INDEX_BKP%' 
order by table_name desc 

Но этот запрос дает мне SBC_RAO_INDEX_31_05_2016_04_99 в качестве первой строки, которая не является правильным.

Есть ли способ получить последнее имя таблицы? Пожалуйста, помогите мне в решении этого вопроса

ответ

0

Попробуйте это. Надеюсь, поможет.

SELECT 
    A.* 
FROM 
    (
    SELECT 
     'SBC_RAO_INDEX_30_05_2016_04_99' AS fle 
    FROM 
     DUAL 
    UNION ALL 
    SELECT 
     'SBC_RAO_INDEX_31_05_2016_04_99' AS fle 
    FROM 
     DUAL 
    UNION ALL 
    SELECT 
     'SBC_RAO_INDEX_01_06_2016_04_99' AS fle 
    FROM 
     DUAL 
    UNION ALL 
    SELECT 
     'SBC_RAO_INDEX_02_06_2016_04_99' AS fle 
    FROM 
     DUAL 
    UNION ALL 
    SELECT 
     'SBC_RAO_INDEX_03_06_2016_04_99' AS FLE 
    FROM 
     DUAL 
) 
    A 
ORDER BY 
    TO_DATE(REPLACE(SUBSTR(A.FLE,15,10),'_','/'),'DD/MM/YYYY') DESC; 
0

потому, что в как «_» это специальный символ, использование SUBSTR вместо:

SELECT * 
    FROM all_tables 
WHERE SUBSTR(table_name,1,13) ='SBC_RAO_INDEX' 
    AND SUBSTR(table_name,15,3) <> 'BKP' 
ORDER BY table_name DESC 
0

Поскольку подчеркивание специальный символ для LIKE и соответствует любому символу, избежать его соответствую буквальному подчеркиванию, определяя экранирующий символ, как это (вам нужна лазейка для каждого т.П.), а затем поместить этот символ непосредственно перед подчеркиванием:

select * 
from all_tables 
WHERE table_name like 'SBC\_RAO\_INDEX%' ESCAPE '\' 
and table_name not like 'SBC\_RAO\_INDEX\_BKP%' ESCAPE '\' 
order by table_name desc; 

Обратите внимание, что вы все равно можете использовать знак подчеркивания для соответствия одному символу в одной строке, просто избегайте его, когда вам нужно соответствовать буквальному подчеркиванию.

0

Спасибо за ваши ответы. Следующий запрос заполнил мое требование.

выберите имя_таблицы из ALL_TABLES ГДЕ имя_таблицы как 'SBC_RAO_INDEX_%' и имя_таблицам не нравятся 'SBC_RAO_INDEX_BKP%' заказа по TO_DATE (SUBSTR (table_name, 15,10), 'ДД/ММ/ГГГГ') DESC;

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