使用 Rails ActiveRecord 的 MySQL REGEXP

标签 mysql ruby-on-rails ruby regex activerecord

这已经困扰我一段时间了...我需要查询一个用户表并找到名称中有两个空格的用户。 我有多个直接针对数据库的 SQL 查询版本,最简单和更简洁的是:

SELECT 'first  last' REGEXP '[[:space:]]{2}';

我还可以使用 ruby​​ REGEX 使其在 rails 上工作:

User.pluck(:full_name).select {|n| n =~ /([[:alpha:]]*)[[:space:]]{2}/ }

User.pluck(:full_name).select {|n| n =~ /\w+\s{2}/ }

我一直在尝试以多种方式使用 AR,但我不确定我错过了什么。也许我需要逃避什么... 我读了几遍: http://dev.mysql.com/doc/refman/5.0/en/regexp.html

我只是不明白为什么它不起作用

2] pry(main)> User.where("'full_name' REGEXP ?", "[[:alpha:]]*[[:space:]]{2}").count
=> 0
[3] pry(main)> User.where("'full_name' REGEXP ?", '[[:alpha:]]*[[:space:]]{2}').count
=> 0
[4] pry(main)> User.where("'full_name' REGEXP ?", '[[:alpha:]]*[[:space:]]{2}').to_sql
=> "SELECT `users`.* FROM `users` WHERE ('full_name' REGEXP '[[:alpha:]]*[[:space:]]{2}')"
[5] pry(main)> User.where("'full_name' REGEXP ?", '[[:space:]]{2}')
=> []
[6] pry(main)> User.where("'full_name' REGEXP ?", '[[:blank:]]{2}')
=> []
[7] pry(main)> User.where("'full_name' RLIKE ?", '[[:blank:]]{2}')
=> []
[8] pry(main)> User.where("'full_name' RLIKE ?", '[[:blank:]]{2}').to_sql
=> "SELECT `users`.* FROM `users` WHERE ('full_name' RLIKE '[[:blank:]]{2}')"
[9] pry(main)> User.where("'full_name' RLIKE ?", '[[:blank:]]').count
=> 0
[10] pry(main)> User.where("'full_name' RLIKE ?", '[[:space:]]').count
=> 0
[11] pry(main)> User.where("'full_name' RLIKE ?", '.*[[:space:]].*').count
=> 0
[12] pry(main)> User.where("'full_name' RLIKE ?", '\[[:space:]\]').count
=> 0

最佳答案

问题不在于您的正则表达式,而在于您的列名。您在询问 MySQL literal string 'full_name' 是否有两个空格。改变这个:

User.where("'full_name' REGEXP ?", '[[:space:]]{2}')

为此:

User.where("full_name REGEXP ?", '[[:space:]]{2}')

在你这样做之后,我认为你的大部分/所有尝试都会奏效。

关于使用 Rails ActiveRecord 的 MySQL REGEXP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36102602/

相关文章:

mysql - 如何对 Group by 的结果进行降序排序?

php - PHP 中的 ip2long() 是否等于 MySQL 中的 INET_ATON() 函数?

ruby-on-rails - rails/事件记录 : not retrieving the correct column through a join with a has_one/belongs_to relationship

ruby-on-rails - Rails 存储聚合信息

ruby - Ruby 1.9.3-p392+ 中的 SSL 连接错误

ruby - 成功使用后和几天后的 RVM 'not found'

javascript - Ajax 代码将用户数据发送到更新表的已编辑行的 php 页面

MySQL IF 语句用法

ruby-on-rails - 解释 Ruby 中的哈希

Ruby:将 CIDR 转换为网络掩码