gpt4 book ai didi

php - Mysql LIKE 通配符有时存在值

转载 作者:行者123 更新时间:2023-11-29 14:13:59 24 4
gpt4 key购买 nike

标题可能有点令人困惑,但我可以在这里澄清。

我正在尝试使用 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

最佳答案

To acomplish this with regular expressions it would be like this (:?)jimmy(:?) if that helps.

所以使用REGEXP

I'm trying to store Multiple name into one column and need to remove that one person.

不要那样做。使用 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

关于php - Mysql LIKE 通配符有时存在值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com