Фильтрация значений внутри поля с помощью команды SQL - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть одна таблица, как показано ниже: Table 1 И у меня есть еще одна таблица, как показано ниже:

Table 2 Теперь я хочу отфильтровать Имя изображения из таблицы 1 - поле описания изображения и сравните его с именем изображения в таблице 2 и верните идентификатор изображения в выходной таблице. Поэтому мне нужна моя таблица выходных данных, как показано ниже:

Output table Может кто-нибудь, пожалуйста, помогите в этом.

Ответы [ 4 ]

2 голосов
/ 22 февраля 2020

Вы можете использовать substring_index(). Предполагая, что это последнее значение:

select substring_index(image_description, 'image=', -1)
from t;

Если оно может находиться в любом месте списка, разделенного точкой с запятой:

select substring_index(substring_index(image_description, 'image=', -1), ';', 1)
from t;

Здесь - это скрипта db <>.

РЕДАКТИРОВАТЬ:

В Oracle, вы бы просто использовали regexp_replace():

select regexp_replace(image_description, '^.*image=([^;]+).*', '\1')
from t;

Здесь - это db <> скрипта для эта версия.

Остальное просто присоединяется к значениям.

1 голос
/ 22 февраля 2020

Похоже, вы используете Oracle, а не MySql, поэтому попробуйте этот запрос с left объединением table1 к table2 и оператором like:

select t1.Name, t2."image id"
from table1 t1 left join table2 t2
on t1."image description" like '%image="' || t2.image || '" />'

. работайте с образцами данных в том виде, в каком вы их разместили, но если image="..." может появиться где-нибудь внутри строки, используйте:

on t1."image description" like '%image="' || t2.image || '"%'

См. demo . Результаты:

> NAME | image id
> :--- | -------:
> x    |        1
> b    |     null
> y    |        2
> z    |        2
> a    |     null
1 голос
/ 22 февраля 2020

Если предположить, что значения для столбца image_des c всегда имеют один и тот же формат, который заканчивается текстовым шаблоном image=...., будет работать следующее.

SELECT SUBSTR(image_desc, LOCATE('image=', image_desc) + 6) AS image
FROM images;
1 голос
/ 22 февраля 2020

, если ваш шаблон содержания описания изображения всегда одинаков, и искомое значение находится справа от = char

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

Для mysql

select SUBSTRING_INDEX(your_column_name,'=',-1) 
from your_table 
where your_column_name like '%image%';

для Oracle вы можете использовать

SUBSTR (youc_col, INSTR (you_col, '=') + 1)

select SUBSTR(youc_col, INSTR(you_col, '=') + 1) 
from your_table 
where your_column_name like '%image%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...