【问题标题】:Mysql query find replaced column valueMysql查询查找替换的列值
【发布时间】:2019-08-22 06:50:35
【问题描述】:

您好,任何人都想像下面的代码那样找到 MySQL 行,但这个行不通。

我有列值“1205_15_09”,我想使用像 120515 这样的条件找到这一行

SELECT * replace(column_name , '_', '' ) AS new_name 
FROM `table_name` WHERE new_name LIKE '120515%';

【问题讨论】:

  • 列中的数据是否总是采用这种格式:xxxx_xx_xx?如果是,那么最好将输入值修改为这种格式,以便您可以利用列上的索引。在列上使用Replace()函数,根本不会使用任何索引,对于大表来说效率极低。

标签: mysql


【解决方案1】:

您可以使用以下内容:

SELECT *, REPLACE(column_name, '_', '') AS new_value
FROM table_name 
WHERE REPLACE(column_name, '_', '') LIKE '120515%';

demo on dbfiddle.uk

您不能在查询的WHERE 部分使用列别名,因为SELECT 部分在WHERE 部分之后执行。见下面StackOverflow answer描述MySQL的查询执行顺序。

所以你必须在WHERE 部分使用REPLACE。如果您不需要查看/使用new_value,您可以删除SELECT 上的REPLACE


如果格式始终为xxxx_xx_xx,您还可以使用如下解决方案:

SELECT *
FROM table_name 
WHERE column_name LIKE CONCAT(INSERT(INSERT('120515', 5, 0, '_'), 8, 0, '_'), '%');

demo on dbfiddle.uk

由于@Madhur Bhaiya 已经mentioned in the comments,您可以使用column_name 上的索引来提高大型表的性能。

【讨论】:

  • 还有一个疑问,我有一个像 'N-1001-2HO' 这样的值,我想使用像条件 column_name = '10012' 这样的数字模式来找到它是可能的吗?
  • 数字部分总是相同的格式? - N-xxxx-xHO
  • 这是一种情况,它有更多的模式,如N-xxx,N-xxx-xxx
  • @vijinselvaraj - 您使用的是哪个 MySQL 版本?
  • MySQL 版本 5.6.17
【解决方案2】:

还有一种带有HAVING 子句的方法。所以不需要复制REPLACE(...)

SELECT *, REPLACE(column_name, '_', '') AS new_value
FROM table_name 
HAVING new_value LIKE '120515%';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 2011-07-24
    • 2021-06-08
    • 2023-03-18
    • 2017-11-10
    相关资源
    最近更新 更多