我在这一栏中有一个string
India_Project1_BA_Protex_123
Japan_ProQ_CXR_Tbxc_3456
我需要在Project1_BA
ProQ_CXR
或mySQL
这样的内容
答案 0 :(得分:15)
提取字符串的某些部分有两个函数,它们是SUBSTRING
& SPLITSTRING
但SUBSTRING
在这种情况下无法使用,SPLITSTRING
中不存在MySql
。所以你必须编写自己的函数:
MySQL不包含拆分字符串的功能。但是,创建自己的功能非常容易。
创建函数语法
user-defined function 是一种用新的方式扩展MySQL的方法 功能类似于原生MySQL功能。
CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL}
要创建函数,您必须具有INSERT权限 数据库中。
拆分字符串
以下示例函数需要3个参数,执行一个 使用SQL函数进行操作,并返回结果。
功能
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, '');
<强>用法强>
SELECT SPLIT_STR(string, delimiter, position)
示例强>
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/
希望这有帮助。
答案 1 :(得分:3)
这对你有用吗?
SELECT * FROM table WHERE colum LIKE '%Project1_BA%' OR column LIKE '%ProQ_CXR%'
答案 2 :(得分:0)
编辑:他们为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
答案 3 :(得分:0)
添加到AlphaMale's answer(我建议代码更改编辑,不确定这里的礼节吗?),我稍微改变了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 |
+------------+