0

私のテーブルには、次のような文字列があります。

Quisque scelerisque, odio ut ornare faucibus - IR:5443_XP
Maecenas eleifend felis in - IR:2077_XP

上記の文字列では、数字(5443、2077)のみを抽出し、データを次のように変換する必要があります。

Quisque scelerisque, odio ut ornare faucibus - Model ID = 5443
Maecenas eleifend felis in - Model ID = 2077

データベースには、変更する必要のあるこれらが多数あります。MySQLでこれを行うにはどうすればよいですか?MySQLの「REGEXP」関数はこれを行うのに十分強力ではないと思います。部分式を使用して数字を格納し、それらを取得してテキストを2番目の形式に更新する必要があると思います。

http://www.mysqludf.org/lib_mysqludf_preg/を確認しましたが、xampp環境で実行できませんでした。

4

1 に答える 1

0

私はおそらくUDFなしでこのようなことをするでしょう。

SELECT
    `text` AS 'original_text',
    IF(`text` REGEXP '[[:<:]]IR:[0-9]+_XP$',
        CONCAT(
            SUBSTRING_INDEX(`text`,CONCAT('IR:',SUBSTRING_INDEX(`text`,'IR:',-1)),1),
            'Model ID = ',
            SUBSTRING_INDEX(SUBSTRING_INDEX(`text`,'IR:',-1),'_',1
        )
     ),`text`) AS 'modified_text'
FROM `example_table`

次のようなテーブル構造を持つ:

CREATE TABLE `example_table` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `text` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

ただし、これがどれほど高速で効率的かはわかりません。

編集:

SELECTバージョンはごめんなさい。これがUPDATE1つです:

UPDATE `example_table`
SET `text` = CONCAT(
    SUBSTRING_INDEX(`text`,CONCAT('IR:',SUBSTRING_INDEX(`text`,'IR:',-1)),1),
    'Model ID = ',
    SUBSTRING_INDEX(SUBSTRING_INDEX(`text`,'IR:',-1),'_',1)
)
WHERE `text` REGEXP '[[:<:]]IR:[0-9]+_XP$';
于 2012-07-19T12:50:17.617 に答える