0

是否可以使用带有 DataMapper“.like”条件语法的正则表达式?

例如,我只想查找爱好以字符串“skating”开头的用户。

正则表达式看起来像这样:

^滑冰

目前,我只能找到所有爱好包含“滑冰”一词的用户,因此返回的记录比我想要的要多。

>> User.all(:hobby.like => "%skating%")

# 我得到了什么

+--------------+---------------+------------------ +----------+
| 登录 | 名字 | 姓氏 | 爱好 |
+--------------+---------------+------------------ +----------+
| 杰斐逊 | 汤姆 | 杰斐逊 | 滑冰 |
| 亚当斯 | 约翰 | 亚当斯 | 滑冰 |
| 华盛顿| 乔治 | 华盛顿 | 速滑 |
+--------------+---------------+------------------ +----------+

# 我想得到什么

+--------------+---------------+------------------ +----------+
| 登录 | 名字 | 姓氏 | 爱好 |
+--------------+---------------+------------------ +----------+
| 杰斐逊 | 汤姆 | 杰斐逊 | 滑冰 |
| 亚当斯 | 约翰 | 亚当斯 | 滑冰 |
+--------------+---------------+------------------ +----------+

>> User.all(:hobby.like => "%^skating%")

# 没有结果

感谢您的任何反馈!

4

2 回答 2

0

怎么样 :

    User.all(:hobby.like => "skating%")
于 2012-10-11T19:34:01.287 回答
0

Datamapper 确实允许您在使用 和 查找记录时通过其属性使用正则表达式:conditions查询mysql 。:all:first:last

请参阅标有“兼容性”的部分:http: //datamapper.org/docs/find.html

例如,这有效(我已经测试和验证):

User.all(:conditions => ['hobby REGEXP ?', '^skating'])

这相当于 MySQL:

SELECT * FROM `user` WHERE (hobby REGEXP '^skating');

在上面的 Datamapper 示例中,REGEXP指的是 MySQL 对正则表达式的支持:

https://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_regexp

而且,为了清楚起见,上面 Datamapper 示例中的问号有助于避免错误和 SQL 注入。

于 2017-07-21T04:03:27.670 回答