标题可能有点令人困惑,但我可以在这里澄清一下。
我正在尝试使用mysql的LIKE来匹配有时被a包围的值:或者有时它可以在一侧,或者有时也不是。我知道通配符%,但会选择所有内容,所以我找到_哪个会起作用,但它总是选择那个单个字符,我只想选择那个字符,如果它是:否则不行。
仍然困惑?这是一个例子。
假设我在表'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
答案 0 :(得分:1)
用正则表达式来表达它,如果有帮助的话就像这样(:?)jimmy(:?)。
所以使用REGEXP
?
我正在尝试将多个名称存储到一个列中,并且需要删除该一个人。
不要那样做。使用您的RDBMS的关系功能和normalise您的架构:
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