列中的MYSQL格式数据

时间:2011-03-18 03:31:20

标签: mysql

我对MYSQL中的格式化数据有疑问。

这就是我的表格的样子

Table Movie
ID             Movie           Cast
1              Movie1          Actor1(Role1), Actor2(Role2), Actor3(Role3)
2              Movie2          Actor2(Role4), Actor3(Role1)
3              Movie3          Actor3(Role7), Actor5(Role9), Actor2(Role4)

我知道在一个字段中有多个值是糟糕的数据库设计,我也在努力分离这些值。

任何人都可以帮我删除Cast中的(角色)吗? 有没有检查“(”和“)”并删除括号之间的所有字符?

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

如果你调整括号而不是括号,这个SQL函数可以让你从a user comment in mysql's manual开始。

delimiter ||
DROP FUNCTION IF EXISTS strip_tags||
CREATE FUNCTION strip_tags( x longtext) RETURNS longtext LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA
BEGIN
DECLARE sstart INT UNSIGNED;
DECLARE ends INT UNSIGNED;
SET sstart = LOCATE('<', x, 1);
REPEAT
  SET ends = LOCATE('>', x, sstart);
  SET x = CONCAT(SUBSTRING( x, 1 ,sstart -1) ,SUBSTRING(x, ends +1 )) ;
  SET sstart = LOCATE('<', x, 1);
UNTIL sstart < 1 END REPEAT;
return x;
END;
||
delimiter ;

mysql> SELECT strip_tags('<a href="HelloWorld.html"><B>Hi, mate!</B></a>') as strip_tags;

+------------+`
| strip_tags |`
+------------+`
| Hi, mate!  |
+------------+

答案 2 :(得分:0)

您还可以运行此查询3次,它将删除3个括号及其中的内容。

我可以把它变成一个查询,但我认为它会太长而且修改起来会更难(容易出错)

UPDATE table_name SET cast=REPLACE( cast ,  SUBSTRING(cast, LOCATE("(", cast)   , ( LOCATE(")", cast) - LOCATE("(", cast) +1  )) , ""     ) ;

如果您拆分查询,则会看到:

我们得到开括号和右括号之间的字符长度,+1表示包括右括号)

( LOCATE(")", cast) - LOCATE("(", cast) +1  )

在这里,我们从第一次出现时开始选择演员专栏中的文字(长度取自片段上方的行。

SUBSTRING(cast, LOCATE("(", cast)   , ( LOCATE(")", cast) - LOCATE("(", cast) +1  ))

最后我们使用REPLACE函数,它将前一行的结果作为参数。

这里记录了所有这些功能:

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace