5

私はstringこのような列を1つ持っています

India_Project1_BA_Protex_123

Japan_ProQ_CXR_Tbxc_3456

私はこれを選択Project1_BAまたはProQ_CXR好きにする必要がありますmySQL

4

4 に答える 4

16

文字列の一部を抽出する関数が 2 つあります。これらはSUBSTRING&SPLITSTRINGですがSUBSTRING、この場合は使用できず、 にSPLITSTRINGはありませんMySql。したがって、独自の関数を作成する必要があります。

MySQL には、文字列を分割する関数が含まれていません。ただし、独自の関数を作成するのは非常に簡単です。

関数構文を作成する

ユーザー定義関数は、ネイティブの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   |
+------------++-------+

これで、2 つの結果を連結できます。最終結果を取得します。

完全なチュートリアルはこちら: http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

お役に立てれば。

于 2012-05-07T05:07:21.053 に答える
3

これはうまくいきますか?

SELECT * FROM table WHERE colum LIKE '%Project1_BA%' OR column LIKE '%ProQ_CXR%'
于 2012-05-07T04:48:30.270 に答える
0

AlphaMale の回答(コード変更の編集を提案しますか? ここでは 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      |
+------------+
于 2016-11-14T00:39:25.790 に答える
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
于 2012-05-07T05:21:32.853 に答える