【发布时间】:2011-02-08 06:51:15
【问题描述】:
我有一个整数列,我需要搜索该列以 19 开头的行
在 MySQL 中,我会使用 SELECT ... WHERE id LIKE '19%'
错误:运算符不存在:整数~~未知 LINE 1: select * from "table" where "id" like '19%'
【问题讨论】:
标签: postgresql search integer
我有一个整数列,我需要搜索该列以 19 开头的行
在 MySQL 中,我会使用 SELECT ... WHERE id LIKE '19%'
错误:运算符不存在:整数~~未知 LINE 1: select * from "table" where "id" like '19%'
【问题讨论】:
标签: postgresql search integer
在 Postgres 中 LIKE 只是字符串比较 - 这解释了错误。
您可以将列显式转换为字符串:
select * from "table" where id::text like '19%'
【讨论】:
where CAST (id AS text) like '19%' 但 id::text 更好。
CAST (id AS xxx) 是标准的 SQL 强制转换语法。
对于所有 >= 10 的正整数,您可以在不需要 TEXT/VARCHAR 的情况下执行此操作:
SELECT * FROM "table"
WHERE $1 = id / (10 ^ (floor(log(id)-1)))::integer
您也可以将其编入索引:
CREATE INDEX idx_table_2_digits
ON "table" ( 10 / (id ^ (floor(log(id)-1)))::integer);
计算基本上是这样的:
这个算法甚至可以概括为一个函数 f(x,y),其中 x 是 id,y 是要返回的前导数字的数量:
# python-esque pseudocode:
def integer_leading_digits (id, digits):
if id < (10 * (digits - 1)):
return -1 # error condition
return id DIV int(10 ^ (floor(log(id)-(digits-1))))
【讨论】: