PostgreSQL技术问询:筛选crop表中field_id首数字为7的数据行
解决PostgreSQL中按整数列首数字筛选数据的问题
你当前尝试的语句大概率会报错——因为field_id是整数类型,而left()函数是专门处理字符串的,直接对整数调用字符串函数会触发类型不匹配的问题。下面给你几种可行的解决方案:
方法一:类型转换后匹配首字符(最直观)
先把整数类型的field_id转换成字符串,再用left()提取首字符进行匹配,注意要把对比的7写成字符串格式:
SELECT * FROM crop WHERE LEFT(field_id::TEXT, 1) = '7';
方法二:用数学运算判断(性能更优)
如果你的field_id都是正整数,用纯数学运算可以避免类型转换,查询性能会更好:
SELECT * FROM crop WHERE field_id >= POWER(10, FLOOR(LOG10(field_id))) * 7 AND field_id < POWER(10, FLOOR(LOG10(field_id))) * 8;
原理是先计算出field_id对应的位数量级(比如123的量级是100),再判断它是否处于7*量级到8*量级之间,以此确保首数字为7。
方法三:使用SUBSTRING函数提取首字符
和方法一逻辑类似,换用SUBSTRING函数实现:
SELECT * FROM crop WHERE SUBSTRING(field_id::TEXT FROM 1 FOR 1) = '7';
注意:如果
field_id可能包含负数,方法二会因为LOG10不支持负数而失效,此时优先选择方法一或方法三。
内容的提问来源于stack exchange,提问作者ilFonta
相关产品推荐
相关产品推荐

