MySQL中如何过滤业务逻辑等价于NULL的POINT(0,0)记录?
过滤MySQL中POINT(0,0)的记录
在MySQL里,你可以通过以下几种方式过滤掉值为POINT(0,0)的记录:
通过坐标提取函数判断
利用ST_X()和ST_Y()分别提取POINT字段的经度和纬度值,判断是否同时为0:SELECT * FROM your_table WHERE NOT (ST_X(your_point_column) = 0 AND ST_Y(your_point_column) = 0);或者换一种逻辑写法,效果完全一致:
SELECT * FROM your_table WHERE ST_X(your_point_column) != 0 OR ST_Y(your_point_column) != 0;直接比较POINT对象
使用ST_Equals()函数直接对比字段值和POINT(0,0)是否相等,取反即可过滤:SELECT * FROM your_table WHERE NOT ST_Equals(your_point_column, POINT(0, 0));这个写法更直观,语义上明确是排除和零点完全相等的空间对象。
适配旧版本MySQL
如果你的MySQL版本较低(5.6及以前),没有ST_前缀的空间函数,可以用X()和Y()替代:SELECT * FROM your_table WHERE NOT (X(your_point_column) = 0 AND Y(your_point_column) = 0);
额外提示
如果你的POINT字段实际还存在NULL值(虽然你提到为了建索引设为非NULL,但可根据业务情况调整),可以把过滤条件扩展为:
SELECT * FROM your_table WHERE NOT (ST_X(your_point_column) = 0 AND ST_Y(your_point_column) = 0) OR your_point_column IS NULL;
内容的提问来源于stack exchange,提问作者littleAlien
相关产品推荐
相关产品推荐

