You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Standard SQL数据类型比较疑问:整数为何始终小于字符串?

数字和字符串跨类型比较的奇怪行为

SQL(Standard SQL/Google BigQuery)里的原因

核心问题出在隐式类型转换的规则上:

  • 执行LENGTH(title) < 4时,LENGTH()返回的是整数,和整数4直接做数值比较,逻辑完全正常,只会挑出标题长度小于4的行。
  • 执行LENGTH(title) < '4'时,数据库会自动做类型转换。在Standard SQL和BigQuery里,这种情况是把左边的整数转成字符串,再和右边的'4'按字典序比大小:
    • 字符串比大小是逐字符看ASCII码,比如长度10转成字符串'10',第一个字符'1'的ASCII码(49)比'4'的(52)小,所以'10' < '4'是true;
    • 哪怕是长度5转成'5',只要你的数据里没有长度等于4的行,或者所有长度转成字符串后都满足字典序小于'4'(比如1-3、10以上的数),就会返回所有行。

Python里的原因

你说的现象只在Python 2里存在:

  • Python 2的跨类型比较规则很奇葩:按类型名称的字典序排,int的类型名比str的小,所以任何整数和字符串比,整数 < 字符串都会返回true。
  • 提醒下:Python 3已经改掉了这个不合理的规则,直接比数字和字符串会报错。

总结

这种问题都是跨类型比较时的隐式转换/规则差异搞出来的,写SQL和代码时尽量保证两边类型一致,别依赖这种模糊的自动转换,省得踩坑。

内容的提问来源于stack exchange,提问作者brking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:51:19