用于在字符串中选择多个值的REGEX

时间:2014-02-18 11:04:53

标签: mysql regex

我需要一个sql select语句来从这个字符串中检索04:30和test.zip:

{"TIME":"04:30","DATE":"11\/25\/2013","FILENAME":["test.zip"]}

2 个答案:

答案 0 :(得分:0)

你不能解码它并使用PHP吗? (假设你无法改变它存储在数据库中的方式)

<?php
$str = '{"TIME":"04:30","DATE":"11/25/2013","FILENAME":["test.zip"]}';
$o = json_decode($str);
$time = $o->TIME;
$file = $o->FILENAME[0];
var_dump($time); //"04:30"
var_dump($file); //"test.zip"

在MySQL中使用正则表达式替换等需要UDF(用户定义函数)mysql-udf-regexp

如果以上都不是可行的解决方案(更改数据库结构,使用PHP,使用MySQL UDF),您需要具有创造性。它需要该字符串的已知静态格式,但您可以替换其他部分和子字符串。例如:

SELECT SUBSTRING(REPLACE(`column_name`,'{"TIME":"',''),1,5) AS `time` FROM `table_name`

文件更复杂,此示例假设数组中只有一个文件名

SELECT REPLACE(SUBSTRING(`column_name`,LOCATE('"FILENAME":["',`column_name`)+13),'"]}','') AS `file` FROM `table_name`

这两个字段选择分别得到04:30test.zip(你当然可以在同一个语句中使用这些函数,而不是像我一样,用逗号分隔它们)

答案 1 :(得分:0)

使用此\[(.*?)\]

它返回[]

之间的值

并且04:30使用TIME":(.*?),

它在"TIME":

之后返回值