У меня есть string
в один столбец, как этотВыберите часть строки в MySQL
India_Project1_BA_Protex_123
Japan_ProQ_CXR_Tbxc_3456
мне нужно выбрать Project1_BA
или ProQ_CXR
, как это в mySQL
У меня есть string
в один столбец, как этотВыберите часть строки в MySQL
India_Project1_BA_Protex_123
Japan_ProQ_CXR_Tbxc_3456
мне нужно выбрать Project1_BA
или ProQ_CXR
, как это в mySQL
ли эта работа для вас?
SELECT * FROM table WHERE colum LIKE '%Project1_BA%' OR column LIKE '%ProQ_CXR%'
Есть две функций для извлечения некоторой части строки, они SUBSTRING
& SPLITSTRING
но SUBSTRING
не могут быть использованы в данном случае и SPLITSTRING
нет в MySql
. Таким образом, вы должны написать свою собственную функцию:
MySQL не включает функцию разделения строки. Тем не менее, очень легко создать свою собственную функцию.
Create function syntax
A user-defined function is a way to extend MySQL with a new function that works like a native MySQL function.
CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL}
To create a function, you must have the INSERT privilege for the database.
Split strings
The following example function takes 3 parameters, performs an operation using an SQL function, and returns the result.
Function
CREATE FUNCTION SPLIT_STR( x VARCHAR(255), delim VARCHAR(12), pos INT ) RETURNS VARCHAR(255) RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, '');
Usage
SELECT SPLIT_STR(string, delimiter, position)
Example
SELECT SPLIT_STR('India_Project1_BA_Protex_123', '_', 2) as second; SELECT SPLIT_STR('India_Project1_BA_Protex_123', '_', 3) as third; +------------++-------+ | second || third | +------------++-------+ | Project1 || BA | +------------++-------+ | ProQ || CXR | +------------++-------+
Теперь вы можете сцепить два результата. чтобы получить окончательный результат.
Полный учебник здесь: http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/
Надеется, что это помогает.
Спасибо, Получил решение. Я использовал этот запрос. Выберите CONCAT (REPLACE (SUBSTRING (SUBSTRING_INDEX ('India_Project1_BA_Protex_123', '_', 2), LENGTH (SUBSTRING_INDEX ('India_Project1_BA_Protex_123', '_', 2 -1)) + 1), '_' , ''), '_', REPLACE (SUBSTRING (SUBSTRING_INDEX ('India_Project1_BA_Protex_123', '_', 3), LENGTH (SUBSTRING_INDEX ('India_Project1_BA_Protex_123', '_', 3 -1)) + 1), ' _ ',' ')) – Gulrej
@Gulrej Пожалуйста, примите ответы, если они помогли ... Спасибо. – AlphaMale
Я немного изменил функцию 'SPLIT_STR', поскольку он разбился для моего случая с использованием многобайтовых символов, см. Http://stackoverflow.com/a/40580413/4852737 – joshweir
EDIT: Они работают для ORACLE
Я написал следующие вопросы, и они, кажется, работают ...
SELECT
SUBSTR((SELECT SUBSTR('India_Project1_BA_Protex_123',
INSTR('India_Project1_BA_Protex_123', '_')+1, instr('India_Project1_BA_Protex_123',
'_', 1,2)) AS output
FROM DUAL),1, INSTR((SELECT SUBSTR('India_Project1_BA_Protex_123',
INSTR('India_Project1_BA_Protex_123', '_')+1, instr('India_Project1_BA_Protex_123',
'_', 1,2)) AS output
FROM DUAL),'_',1,2)-1) FROM DUAL
SELECT
SUBSTR((SELECT SUBSTR('Japan_ProQ_CXR_Tbxc_3456', INSTR('Japan_ProQ_CXR_Tbxc_3456',
'_')+1, instr('Japan_ProQ_CXR_Tbxc_3456', '_', 1,2)) AS output
FROM DUAL),1, INSTR((SELECT SUBSTR('Japan_ProQ_CXR_Tbxc_3456',
INSTR('Japan_ProQ_CXR_Tbxc_3456', '_')+1, instr('Japan_ProQ_CXR_Tbxc_3456', '_', 1,2))
AS output
FROM DUAL),'_',1,2)-1) FROM DUAL
Вы проверили его? Если он работает?? Это дало мне ошибку: # 1582 - Неправильный счетчик параметров в вызове функции native «instr» – AlphaMale
жаль, что я не вижу, что это было для mysql ... Я тестировал выше для Oracle, и они работают .. – knurdy
вам следует обновить ваш ответ и упоминание об этом работает для оракула. – AlphaMale
Добавление к AlphaMale's answer (ли я предлагаю код изменения редактировать, не уверен SO этикета ? здесь), я изменил SPLIT_STR
UDF немного, как он ломает для многобайтных символов:
CREATE FUNCTION SPLIT_STR(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
/* use CHAR_LENGTH instead of LENGTH */
CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');
Пример:
select split_str("Håkansson[!!]Maria", "[!!]", 2) as test;
+------------+
| test |
+------------+
| Maria |
+------------+
Это не будет работать для меня, потому что строки являются динамическими, – Gulrej
Я попытался, как этот Select SUBSTRING_INDEX («India_Project1_BA_Protex_123», «_», 2), но это дает мне две первые части, как «India_Project1 ', но я хочу, чтобы вторая и третья части были «Project1_BA» – Gulrej