PostgreSQL中bigint用~正则运算符报错,能否无需类型转换?
解决PostgreSQL中bigint字段无法使用正则操作符的问题
嘿,作为PostgreSQL新手遇到这个问题太正常啦,我来给你捋清楚怎么搞定!
首先你碰到的ERROR: operator does not exist: bigint ~ unknown报错,原因很直接:PostgreSQL的~正则匹配操作符只支持字符串类型(text/varchar等),而你的install_status是bigint数值类型,数据库找不到对应的操作符来处理数值和正则的匹配,所以就报错了。
你问能不能不用类型转换让查询正常运行?当然可以!而且这种场景下完全没必要用正则——因为你要匹配的是明确的两个数值:3和110,直接用数值匹配的方式就行,比正则更高效,还不用转类型。
给你两种等价的写法:
方法1:使用IN子句(更简洁)
select name, ip_address, install_status from sn_cache_prod.cmdb_ci where support_group = 'bee96a2135a631007fa2c5751b2c74be' and u_environment = 5 and install_status IN (3, 110);
方法2:使用OR条件(逻辑更直观)
select name, ip_address, install_status from sn_cache_prod.cmdb_ci where support_group = 'bee96a2135a631007fa2c5751b2c74be' and u_environment = 5 and (install_status = 3 OR install_status = 110);
额外小提示:
这两种写法不仅满足你“无需类型转换”的要求,还有个隐藏优势:如果install_status字段有索引的话,数值匹配可以直接利用索引,查询性能会比转成字符串用正则好很多哦!
内容的提问来源于stack exchange,提问作者Nikhil Mehta
相关产品推荐
相关产品推荐

