【问题标题】:Mysql Trim not working for all values of specific columnMysql Trim 不适用于特定列的所有值
【发布时间】:2019-10-13 11:04:25
【问题描述】:

我有一个表,其中一些值存储在关键字列中,但是关键字列中的值包含额外的空间,而检索数据查询由于这个额外的空间而没有获取所有记录,我尝试在 mysql 中使用 trim() 但它没有不适合我

预期输出:mysql 查询应该通过避免 where 条件后面的额外空间来获取所有记录。

表:

id  keyword    
1   some text for product  //here  single  space after 'some'
2   some   text for product  // here two space after 'some'

查询:

SELECT * FROM `table` where trim(keyword)='some text for product'

执行上述查询后,由于列值中有多余的空格,将只返回单个记录而不是所有记录。

【问题讨论】:

  • trim 只会删除前导和尾随字符,默认为空格。我不知道你对 trim(keyword) = "some text for product' a keyword nother 可以等于 a text with some words。
  • 实际上我想从关键字列中获取所有值,但它包含额外的空间,因此查询不起作用
  • 更新您的问题并添加适当的数据样本..和预期结果
  • 搜索 sql 替换空格,例如 stackoverflow.com/questions/2455750/… ,即使 sql server 很容易适应 mysql ..
  • 您的数据包含双空格是否有(好的)理由?否则,请确保您的数据以正确的方式存储(例如,在存储它们之前删除双空格)。存储无效/无用/次优数据是一个令人头疼的原因。您可能还想研究全文搜索,它可以让您在随机文本(例如空格、点、词序等)中搜索随机文本时宽大一些,并且可能(或可能不)也有效。

标签: mysql


【解决方案1】:

TRIM() 删除字符串开头或结尾的空格。您基本上想用单个空格替换字符串中的双空格。您可以改用REPLACE()

SELECT * FROM `table` WHERE REPLACE(keyword, '  ', ' ') = 'some text for product'

Demo on DB Fiddle

WITH `table` AS (
      SELECT 'some text for product' keyword
      UNION ALL SELECT 'some  text for product' keyword
)
SELECT * FROM `table` WHERE REPLACE(keyword, '  ', ' ') = 'some text for product';

| keyword                |
| ---------------------- |
| some text for product  |
| some  text for product |

【讨论】:

  • @MSP:我在答案中添加了一个 db fiddle;这适用于您提供的示例数据。
猜你喜欢
  • 1970-01-01
  • 2021-08-28
  • 2016-04-25
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多