2015-11-15 5 views
0

у меня есть фракции в виде строки в моей базе данных, и в настоящее время она, как это:Изменение фракций в SQL

3/8 

Я хочу изменить это:

<sup>3</sup>&frasl;<sub>8</sub> 

У меня есть много фракций, как это , Как изменить их при одном выстреле в SQL? Я знаю, что мне нужно использовать регулярные выражения, но не знаю, как их использовать.

То, что я пытался до сих пор:

UPDATE question_table 
SET `option` = Replace(`option`, ?? ,??) 
WHERE `option` LIKE '%/%' 

Не уверен, что завалить в ??.

+0

У MySQL нет функции замены регулярных выражений. Используйте либо UDF (https://github.com/mysqludf/lib_mysqludf_preg); или сбрасывать данные mysql в файл и обновлять там; или используйте mariadb. – hjpotter92

+0

У вас есть фракции типа '3/8' только? –

+0

1/2, 1/4, 1/8 и многие другие подобны этим – lakesh

ответ

0
SELECT * FROM strings; 
+--------+ 
| string | 
+--------+ 
| 19/32 | 
| 3/8 | 
| 5/16 | 
+--------+ 

SELECT * 
    , CONCAT('<sup>' 
      , SUBSTRING_INDEX(string,'/',1) 
      , '</sup>&frasl;<sub>' 
      , SUBSTRING_INDEX(string,'/',-1) 
      ,'</sub>' 
      ) x 
      FROM strings; 

+--------+-----------------------------------+ 
| string | x         | 
+--------+-----------------------------------+ 
| 19/32 | <sup>19</sup>&frasl;<sub>32</sub> | 
| 3/8 | <sup>3</sup>&frasl;<sub>8</sub> | 
| 5/16 | <sup>5</sup>&frasl;<sub>16</sub> | 
+--------+-----------------------------------+ 

UPDATE strings 
    SET string = CONCAT('<sup>' 
        , SUBSTRING_INDEX(string,'/',1) 
        , '</sup>&frasl;<sub>' 
        , SUBSTRING_INDEX(string,'/',-1) 
        , '</sub>' 
        ); 

Query OK, 3 rows affected (0.00 sec) 
Rows matched: 3 Changed: 3 Warnings: 0 

SELECT * FROM strings; 
+-----------------------------------+ 
| string       | 
+-----------------------------------+ 
| <sup>19</sup>&frasl;<sub>32</sub> | 
| <sup>3</sup>&frasl;<sub>8</sub> | 
| <sup>5</sup>&frasl;<sub>16</sub> | 
+-----------------------------------+ 
Смежные вопросы