我有一个整数列,我需要搜索所述列以19
开头的行在MySQL中我会使用SELECT ... WHERE id
LIKE '19%'
ERROR: operator does not exist: integer ~~ unknown LINE 1: select * from "table" where "id" like '19%'
答案 0 :(得分:8)
在Postgres中LIKE只是字符串比较 - 这解释了错误。
您可以显式地将列转换为字符串:
select * from "table" where id::text like '19%'
答案 1 :(得分:3)
对于所有正整数> = 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))))