【问题标题】:MySQL How to Select only columns where value contains stringMySQL如何仅选择值包含字符串的列
【发布时间】:2013-04-25 16:32:44
【问题描述】:

我做了一些搜索,从 stackexchange 上已经发布的一个问题中,答案是不可能的,但我想问。我不知道是否可以形成一个 SELECT 查询来动态选择哪些列将显示在 mysql SELECT 语句结果中。示例:

假设我有此表的列名 Person、ID、Phone Number、Alt Number:

John | 79 | 800-499-0000 | 800-499-5555

我想形成一个 SELECT 语句,这样它只会拉下字段中字符串“800-499”所在的列。因此,MySQL 的理想结果是:

800-499-0000 | 800-499-5555

唯一的问题是我认为动态选择列是不可能的。

感谢任何帮助或确认。

【问题讨论】:

  • 不,结果集中不可能有可变列。请问你想用它解决什么问题?
  • 好吧,有一张巨大的桌子,里面有很多列,所以要找到我需要的字段是一件很痛苦的事情。能够只获取包含信息子串的列会很有帮助,这样我就不必遍历所有其他列来找到我想要的列。
  • @jcsbrotha:但是如果匹配列因记录而异怎么办?
  • @jcsbrotha:“穿过列”是什么意思?
  • 如果此类数据可能存在于同一个表的许多列中,您可能需要规范化您的架构。

标签: mysql


【解决方案1】:

可以尝试以下方法:

select * from
(select concat(case when col1 like '%800-499-0000%' then concat('col1: ',col1,';') end,
               case when col2 like '%800-499-0000%' then concat('col2: ',col1,';') end,
 ...
               case when coln like '%800-499-0000%' then concat('coln: ',coln,';') end)
        as search_results
 from my_table) sq
where search_results is not null

【讨论】:

  • 这种查询会让 DBA 哭泣。使用像 Solr 这样的搜索引擎会更好地进行基准测试。
  • 简答:Yes.
  • @tadman:更长的答案(来自链接的问题) - 与数据导入处理程序一起使用时。这可能是 OP 问题的可行解决方案 - 您想将其添加为答案吗?
  • 如果你想知道它是如何应用的,你的。
猜你喜欢
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 2021-12-01
  • 2021-12-13
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多