首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串形式的整数比较

字符串形式的整数比较
EN

Stack Overflow用户
提问于 2010-03-24 19:45:30
回答 3查看 5.2K关注 0票数 2

我有一个整型列,我想查找以特定数字开头的数字。

例如,如果我查找‘123’,它们确实匹配:

代码语言:javascript
复制
1234567
123456
1234

它们不匹配:

代码语言:javascript
复制
23456
112345
0123445

在进行字符串比较之前,将整数转换为字符串是处理该任务的唯一方法吗?

此外,我使用Postgre regexp_replace(文本,模式,替换)对数字,这是非常慢和低效的方式做它。

情况是,我有大量的数据要以这种方式处理,我正在寻找最经济的方式来这样做。

PS。我不是在寻找如何将整数转换为字符串的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-24 20:11:49

作为一个标准原则(IMHO),数据库设计应该使用number类型当且仅当字段是:

  1. 您可以明智地在
  2. 上执行数学运算的数字数据库中的参考代码-键等

如果它是其他上下文中的数字--电话号码、IP地址等--则将其存储为文本。

在我看来,你的“123”在概念上是一个恰好只包含数字的字符串,所以如果可能的话,我建议修改一下设计,这样就可以存储它了。

否则,我看不到一种明智的方法来使用它作为数字进行比较,所以您需要使用下面的内容将其动态转换为字符串

代码语言:javascript
复制
SELECT * FROM Table WHERE CheckVar LIKE '''' + to_char(<num>,'999') + '%'
票数 2
EN

Stack Overflow用户

发布于 2010-03-24 19:54:00

您是否正在查找值开头的匹配项?您可以像这样创建一个函数索引:

代码语言:javascript
复制
CREATE INDEX my_index ON mytable(CAST(stuff AS TEXT));

它应该被你的LIKE查询使用,但是我没有测试它。

票数 3
EN

Stack Overflow用户

发布于 2010-03-24 19:49:01

提高性能的最好方法是将它们存储为字符串,并在列上使用索引,并使用LIKE '123%‘。解决此问题的大多数其他方法可能涉及全表扫描。

如果你不被允许改变表格,你可以尝试下面的方法,但是这样做并不美观:

代码语言:javascript
复制
WHERE col = 123
   OR col BETWEEN 1230 AND 1239
   OR col BETWEEN 12300 AND 12399
   etc...

不过,这也可能导致表扫描。您可以通过将OR转换为多个selects来求解,然后对它们执行UNION ALL操作以获得最终结果。

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

https://stackoverflow.com/questions/2507299

复制
相关文章

相似问题

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