如何在SQL中选取名称含空格的列?查询失效求替代方案
带空格字段名查询患者信息的可行方案
你当前使用的基础查询语句如下:
SELECT City, State FROM PATIENT WHERE [Patient Last Name] = 'Parker';
你之前尝试的几种写法失效原因非常明确:
[Patients Last Name]:列名拼写错误,把单数Patient写成了复数Patients,数据库找不到对应字段自然报错'Patients Last Name':单引号包裹的内容会被识别为字符串常量,不会被解析为字段名,相当于判断固定字符串'Patients Last Name'是否等于'Parker',逻辑上永远不成立['Patients Last Name']:一是列名拼写错误多了s,二是方括号作为标识符引用符时,内部不需要额外加单引号,属于语法错误WHERE [Patient Last Name] IN ('Parker'):单值IN判断和等值判断=逻辑完全等价,这个写法本身没有语法问题,如果它也不生效,说明问题和判断运算符无关
可按以下顺序排查替换写法:
- 先确认实际列名
不要凭记忆写列名,先执行对应命令查询PATIENT表的真实结构,确认姓氏列的准确命名:- SQL Server/Access:执行
sp_help PATIENT - MySQL:执行
DESCRIBE PATIENT; - PostgreSQL:执行
\d PATIENT
很多时候建表时会用last_name、patient_last_name这类下划线命名的字段,而不是带空格的命名,列名写错是这类查询最常见的报错原因。
- SQL Server/Access:执行
- 换对应数据库的标识符引用语法
方括号是SQL Server/Access专属的带特殊字符字段引用写法,如果你用的是其他数据库,要替换成对应语法:- MySQL/MariaDB 用反引号包裹字段:
SELECT City, State FROM PATIENT WHERE `Patient Last Name` = 'Parker'; - PostgreSQL/Oracle 用双引号包裹字段(注意双引号内字段名的大小写必须和表结构完全一致):
SELECT City, State FROM PATIENT WHERE "Patient Last Name" = 'Parker';
- MySQL/MariaDB 用反引号包裹字段:
- 处理值匹配异常
如果语法完全正确还是查不到结果,大概率是字段值存在首尾隐藏空格、大小写不一致的问题,可以用字符串清理函数做兼容匹配:-- SQL Server 兼容空格、大小写差异的写法 SELECT City, State FROM PATIENT WHERE LTRIM(RTRIM(LOWER([Patient Last Name]))) = 'parker';
内容的提问来源于stack exchange,提问作者whoami
相关产品推荐
相关产品推荐

