gpt4 book ai didi

MySQL - 从列中选择子字符串,而不从同一列中捕获相似的子字符串

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:48 25 4
gpt4 key购买 nike

在 MySQL 表中,我有一个名为 ShareID 的 VARCHAR 列。

  • 如果第 1 行的 ShareID 值包含格式为 1
  • 的字符串
  • 第 2 行的 ShareID 值包含 10, 1 形式的字符串
  • 第 3 行的 ShareID 值包含 111, 12 形式的字符串。

我想获取 ShareID 为 1 的所有行。即这里只有第一行和第二行。

我试过使用 LIKE 命令,像这样:

SELECT * FROM tablename WHERE ShareWithID LIKE '1%';

但这将捕获其中包含数字 1 的所有行,即第 3 行,这不是我想要的。

我想运行一个命令,该命令只返回上面的第 #1 行和第 2 行,因为其中包含 1 的 ShareID。

我已经尝试了各种命令(包括 REGEXP 和 IN)并管理了一个“frig”解决方案,我会在 ShareID 列中的每个数字之后放置一个逗号,包括最后一个(即 10, 1,),然后执行这个命令:

SELECT * FROM tablename WHERE ShareWithID LIKE '%1,%';

但我宁愿使用适当的解决方案,也不愿使用草率的解决方案。

欢迎提供任何指导。

最佳答案

您不应将数字列表存储在以逗号分隔的字符串中。这是一个非常糟糕的主意:

  • 数字应该存储为数字,而不是字符串。
  • 您的号码似乎是 ID。 ID 应定义明确的外键。
  • SQL——通常——具有糟糕的字符串处理函数。
  • SQL 无法优化带有字符串操作的查询。
  • SQL 有一种很好的存储列表的方法。它被称为

但有时,我们会与其他人一起在设计数据库时做出非常、非常、非常非常糟糕的决定。对于这种情况,MySQL 有一个方便的函数:

where find_in_set(1, ShareWithID) > 0

如果字符串中有空格,需要去掉它们:

where find_in_set(1, replace(ShareWithID, ' ', '')) > 0

关于MySQL - 从列中选择子字符串,而不从同一列中捕获相似的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54489448/

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