【问题标题】:Sql find only one hashtag not twoSql 只找到一个标签而不是两个
【发布时间】:2017-06-13 08:28:35
【问题描述】:

如何在 MySQL 数据库中查找?:

# Some title 

(在文本字段中,大多数标题是:
## Some title
但是只有一个#有一些错误。如何在大型数据库中找到它们?我知道他们只在 text_post 字段中)

我发现它可能是这样的:

SELECT * FROM blog
WHERE text_post LIKE '%#%'

但是,当只有一个#而不是两个时,我怎么能找到呢?

如果我理解,这里不能使用正则表达式。对吗?

【问题讨论】:

  • 什么作用?这里是什么意思?它像正则表达式吗?在正则表达式中将是 0 或 1 个空格
  • 不要低估正则表达式的力量 :-)

标签: mysql sql wildcard


【解决方案1】:
^    - Beginning of line
#    - hashtag
[^#] - Any character other than hashtag
|    - OR operator
$    - End of line

select  *
from    blog
where   text_post rlike '^#([^#]|$)'    

【讨论】:

  • 现在最大的问题是哪种方法的性能更好+1
  • rlike 你确定吗?不应该这样吗?
  • 我复制粘贴你的代码,它给了我一个错误:你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 'rlike '^#([^#]|$)'' 附近使用正确的语法我需要什么来激活 MySql 中的正则表达式吗?
  • 这是一个复制粘贴的工作代码。 SELECT VERSION(); -- 5.7.11-log
  • 我在本地工作。我使用 Mamp,我有最后一个版本的 Mamp 和 MySql 5.6.28
【解决方案2】:

添加一个提取子句以消除双重##

SELECT * 
FROM blog
WHERE (text_post LIKE '%#%' AND text_post NOT LIKE '%##%')

【讨论】:

  • 大概可以写成text_post LIKE '#%' AND text_post NOT LIKE '##%'(去掉%前缀)
  • @DuduMarkovitz 可能,我不确定他们是否只是在开始。
  • 仅在行首。无论如何,这是一个很好的观察。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 2021-09-28
  • 2019-08-02
  • 2023-03-13
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多