0

标题可能有点混乱,但我可以在这里澄清一下。

我正在尝试使用 mysql 的 LIKE 来匹配有时被 : 包围的值,或者有时它可以在一侧,或者有时两者都没有。我知道通配符 % 但这会选择所有内容,所以我发现 _ 可以工作,但它总是选择那个单个字符,我只想选择那个字符,如果它是一个 : 否则不是。

还在迷茫吗?这是一个例子。

假设我在“que”表中有一个名为“name”的列,在“name”列中我得到了一个值“sdfgsdfgsdfg:jimmy:asfds”我想选择“:jimmy:”但如果值是“ sdfgsdfgsdfg:jimmy' 我只想选择 ':jimmy'。

另一个例子。

要使用正则表达式来完成这一点,如果有帮助的话,它会像这样 (:?)jimmy(:?) 。

目的是什么?

我想从该值中删除 jimmy 并将其替换为: 我正在尝试将多个名称存储到一列中,并且需要删除那个人。

到目前为止,我得到了这样的东西:

 UPDATE `que` SET `name`= CASE WHEN `name` LIKE '%jimmy%' THEN replace(`name`, '%jimmy%', ':') ELSE `name` end WHERE 1
4

1 回答 1

1

要使用正则表达式来完成这一点,如果有帮助的话,它会像这样 (:?)jimmy(:?) 。

所以用REGEXP

我正在尝试将多个名称存储在一列中,并且需要删除那个人。

不要那样做。使用 RDBMS 的关系功能并规范化您的模式:

CREATE TABLE que_names (
  que_id BIGINT UNSIGNED NOT NULL,
  name   VARCHAR(255)    NOT NULL,
  FOREIGN KEY (que_id) REFERENCES que (que_id)
);

INSERT INTO que_names
  (que_id, name)
VALUES
  (1, 'bob'),
  (1, 'fred'),
  (1, 'james'),
  (2, 'michael'),
  (2, 'jimmy'),
  (2, 'fred')
  -- etc.
;

ALTER TABLE que DROP COLUMN name;

然后,您将使用以下命令删除所有jimmy内容:

DELETE FROM que_names WHERE name = 'jimmy';

如果需要,您可以按如下方式检索现有表:

SELECT   que.*, GROUP_CONCAT(que_names.name SEPARATOR ':') AS name
FROM     que LEFT JOIN que_names USING (que_id)
GROUP BY que_id
于 2012-10-21T04:28:48.947 回答