postgresql查询取别名时大小写问题

探讨了PostgreSQL中一个特殊现象:所定义的数据列别名会被自动转换为小写形式,并提供了使用引号解决该问题的方法。

 

PostgreSQL的一个"特别"之处,给数据列取的别名被完全转成小写了。在取别名时加上"就可以解决这一问题。截图如下:

在进行 MySQLPostgreSQL(PgSQL)的语法,需要考虑数据类型、基本操作语句等方面的差异。 ### 数据类型换 - **通用数据类型**:MySQL 和 PgSQL 都提供了广泛的数据类型支持,整数、浮点数、字符串、日期间等通用类型在两者之间的换相对直接,例如 MySQL 的 `INT` 对应 PgSQL 的 `INTEGER`,`VARCHAR` 在两者中都有,可直接使用 [^1]。 - **扩展数据类型**:PgSQL 引入了一些扩展的数据类型,如数组、JSON、XML 等。当从 MySQL 换到 PgSQL ,如果 MySQL 中没有对应类型,需要根据实际情况进行调整。例如,若 MySQL 中用字符串模拟数组,换到 PgSQL 可使用其数组类型;对于 JSON 数据,MySQL 中可使用 `JSON_UNQUOTE(JSON_EXTRACT(col1, '$.index'))` 来获值,而 PgSQL 用 `col1 ->> 'index'` [^1][^3]。 ### 基本操作语句换 - **插入数据**:两者插入数据的基本语法类似,都使用 `INSERT INTO`。不过,PgSQL 可以通过在表名后加 `(col1, col2, col3)` 选定赋值的列。例如,MySQL 和 PgSQL 都可以使用 `INSERT INTO table1 (val1, val2, val3)` 手动输入数据,也都支持 `INSERT INTO table1 [SELECT clause]` 表格输入 [^3]。 - **删除数据**:两者都使用 `DELETE FROM` 语句来删除数据,语法基本一致,如 `DELETE FROM table1 [WHERE clause]` [^3]。 - **WITH 语句**:PgSQL 支持 `WITH ... AS` 语句,注意别名(alias)在表格前面,如 `WITH t1 AS ( ... ), t2 AS ( ... ) [SELECT cluase]`,而 MySQL 在较新版本才开始支持 CTE(公共表表达式),语法和 PgSQL 类似 [^3]。 - **UNION 语句**:两者都有 `UNION` 和 `UNION ALL` 语句,使用方式相同,`UNION` 去重,`UNION ALL` 不去重 [^3]。 ### 特殊语法处理 - **主键自增**:MySQL 可以直接设置主键 `id` 自增,而 PgSQL 没有这种直接方式,需要在创建新表为主键创建 `SEQUENCE`(序列对象) [^2]。 - **字段命名**:PgSQL 中如果字段是驼峰命名,查询要用双引号 `""` 包裹起来,否则大写字母会被自动小写字母,而 MySQL 没有此限制 [^2]。 ### 代码示例 以下是一个简单的从 MySQL 语法换到 PgSQL 语法的示例: #### MySQL 示例 ```sql -- 创建表 CREATE TABLE mysql_table ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), json_data JSON ); -- 插入数据 INSERT INTO mysql_table (name, json_data) VALUES ('test', '{"key": "value"}'); -- 查询 JSON 数据 SELECT JSON_UNQUOTE(JSON_EXTRACT(json_data, '$.key')) FROM mysql_table; ``` #### 换后的 PgSQL 示例 ```sql -- 创建序列 CREATE SEQUENCE pgsql_table_id_seq; -- 创建表 CREATE TABLE pgsql_table ( id INTEGER DEFAULT nextval('pgsql_table_id_seq') PRIMARY KEY, "name" VARCHAR(100), json_data JSON ); -- 插入数据 INSERT INTO pgsql_table ("name", json_data) VALUES ('test', '{"key": "value"}'); -- 查询 JSON 数据 SELECT json_data ->> 'key' FROM pgsql_table; ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值