512*_*009 138 sql postgresql case-sensitive case-insensitive identifier
我有一个db表说,persons在Postgres中由另一个有列名称的团队传下来,"first_Name".现在我正在尝试使用PG指令器在此列名称上查询此表.
select * from persons where first_Name="xyz";
Run Code Online (Sandbox Code Playgroud)
它只是回归
错误:列"first_Name"不存在
不确定我是在做一些愚蠢的事情,还是我找不到这个问题的解决方法?
Erw*_*ter 245
在PostgreSQL中,所有非双引号的标识符(包括列名)都折叠为小写.使用双引号创建并因此保留大写字母(和/或其他语法违规)的列名必须在其余生中进行双引号.所以,是的,PostgreSQL列名称区分大小写:
SELECT * FROM persons WHERE "first_Name" = 'xyz';
Run Code Online (Sandbox Code Playgroud)
还要修复不正确的双引号"first_Name".值(字符串文字)用单引号括起来.
我的常设建议是专门使用合法的小写名称,因此不需要双引号.
Eug*_*ash 14
引用文档:
关键字和不带引号的标识符不区分大小写.因此:
Run Code Online (Sandbox Code Playgroud)UPDATE MY_TABLE SET A = 5;可以等同地写成:
Run Code Online (Sandbox Code Playgroud)uPDaTE my_TabLE SeT a = 5;
引用标识符使其区分大小写,而不带引号的名称始终折叠为小写:
UPDATE "my_table" SET "a" = 5;
Run Code Online (Sandbox Code Playgroud)
混合大小写的列名必须在PostgresQL中用双引号引起来。因此,最好的约定是在所有小写字母后加下划线。
| 归档时间: |
|
| 查看次数: |
87023 次 |
| 最近记录: |