SQL查询中未加定界符的数字开头列名1st为何被解析为st
问题解析
这是SQL标准的标识符解析规则,和可省略的AS别名语法共同导致的结果,属于符合标准的正常行为:
- 未加定界符(双引号/方括号)的SQL标识符不允许以数字开头,因此你写的
1st不会被数据库识别为你建表时定义的"1st"列,不会当做一个整体处理。 - 数据库会自动把这段内容拆分为两部分:开头的
1是整数常量,后面的st是这个常量列的别名。SQL语法中,给列指定别名时的AS关键字是可以省略的,SELECT 1 st和SELECT 1 AS st的语义完全等价。 - 所以你最终得到的
st列,本质是值全为1的常量列,和你表中存储的"1st"列没有任何关系,自然不会报错。
正确写法
如果要查询你定义的特殊列,必须用定界符完整包裹列名:
- PostgreSQL 中使用双引号:
"1st" - SQL Server 中开启
QUOTED_IDENTIFIER参数时可使用双引号,也可以通用方括号写法:[1st]
这类不符合常规命名规则的列很容易出现这种「不报错但结果完全错误」的隐形问题,生产环境非常不建议使用。
内容的提问来源于stack exchange,提问作者Manngo
相关产品推荐
相关产品推荐

