首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord / MySQL选择条件比较字符串组件

问ActiveRecord / MySQL选择条件比较字符串组件
EN

Stack Overflow用户
提问于 2010-07-16 22:33:01
回答 2查看 662关注 0票数 0

我有一个字符串,它被定义为一个或多个点分隔的整数,如12345、543.21、109.87.654等。我将值存储在MySQL数据库中,然后需要查找与提供的值进行比较的行。我想要的是通过将字符串的每个组成部分与输入字符串的相应组成部分进行比较来选择行。对于MySQL中的标准字符串比较,下面是它的详细说明:

代码语言:javascript
复制
mysql> SELECT '543.21' >= '500.21' 
-> 1
mysql> SELECT '543.21' >= '5000.21'
-> 1

这是很自然的,因为字符串比较是不考虑字符串长度的“字典”比较,但我希望第二个查询的结果为0。

有没有办法向MySQL提供一些关于如何比较这些内容的提示?否则,有没有办法提示ActiveRecord如何为我做这件事呢?现在,我想出的最好的解决方案是选择所有行,然后使用Ruby的split和reject方法过滤结果。(整个数据集相当小,在可预见的未来不太可能增长太多,所以这是一个合理的选择,但如果有更简单的方法,我不会考虑,我很乐意知道。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-17 22:34:35

您可以使用REPLACE删除点,使用CAST将字符串转换为整数:

代码语言:javascript
复制
SELECT CAST(REPLACE("543.21", ".", "") AS SIGNED) >= CAST(REPLACE("5000.21", ".", "") AS SIGNED)
票数 0
EN

Stack Overflow用户

发布于 2010-07-16 22:37:47

代码语言:javascript
复制
mysql> SELECT '543.21' >= '5000.21';
+-----------------------+
| '543.21' >= '5000.21' |
+-----------------------+
|                     1 | 
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT '543.21'+0 >= '5000.21'+0;
+---------------------------+
| '543.21'+0 >= '5000.21'+0 |
+---------------------------+
|                         0 | 
+---------------------------+
1 row in set (0.00 sec)

这确实只适用于有效的浮点数。如果超过1个点,则需要进行大量的SUBSTRING_INDEX(SUBSTRING_INDEX(field, '.', <positionnumber you're comparing>), '.', -1)比较(手动重复比较最大数量的位置)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3265913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档