PostgreSQL CAST 转换数据类型

本文介绍了PostgreSQL CAST操作,它可实现数据类型转换,不过使用cast操作(::)是PostgreSQL特有功能,并非SQL通用标准。文中通过多个示例,展示了string转integer、date、double等多种数据类型转换,还介绍了用cast转表字段数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍PostgreSQL CAST操作转换数据类型。

1. PostgreSQL CAST介绍

很多时候需要转换数据类型。PostgreSQL 提供了CAST操作实现类型转换。语法如下:

CAST ( expression AS target_type );
  • 表达式可以是常量、列、表达式
  • 目标数据类型即想转换的数据类型

*cast :: operator

除了上面的语法,还有另外的语法实现同样功能;expression::type,举例:

SELECT
  '100'::INTEGER,
  '01-OCT-2015'::DATE;

注意使用cast操作(::)是PostgreSQLT特有功能,非SQL的通用标准。下面通过一些示例展示如何实现类型转换。

2. 示例

2.1 string 转 integer

SELECT CAST ('100' AS INTEGER);

如果表达式不能转成目标类型,会抛出异常,请看示例:

SELECT
	CAST ('10C' AS INTEGER);
[Err] ERROR:  invalid input syntax for integer: "10C"
LINE 2:  CAST ('10C' AS INTEGER);

2.2 string 转 date

SELECT
   CAST ('2015-01-01' AS DATE),
   CAST ('01-OCT-2015' AS DATE);

首先转换 2015-01-01 字符串至 2015-01-01; 然后转换 01-OCT-2015 至 2015-10-01.

2.3 string 转 double

SELECT CAST ('10.2' AS DOUBLE);

哎,怎么报错了:

[Err] ERROR:  type "double" does not exist
LINE 2:  CAST ('10.2' AS DOUBLE)

我们使用DOUBLE PRECISION 代替DOUBLE:

SELECT
   CAST ('10.2' AS DOUBLE PRECISION);

2.4 string 转 boolean

ELECT 
   CAST('true' AS BOOLEAN),
   CAST('false' as BOOLEAN),
   CAST('T' as BOOLEAN),
   CAST('F' as BOOLEAN);

输出如下:

true	false	true	false

2.5 string 转 timestamp

SELECT '2019-06-15 14:30:20'::timestamp;

输出:

2019-06-15 14:30:20

2.6 string 转 interval

SELECT '15 minute'::interval,
 '2 hour'::interval,
 '1 day'::interval,
 '2 week'::interval,
 '3 month'::interval;

输出:

"00:15:00"	"02:00:00"	"1 day"	"14 days"	"3 mons"

2.7 使用cast转表字段数据

首先传教ratings表,包括两个列:id, rating;rating的数据类型是varchar(1):

CREATE TABLE ratings (
	ID serial PRIMARY KEY,
	rating VARCHAR (1) NOT NULL
);

下面插入一些示例数据:

INSERT INTO ratings (rating)
VALUES
	('A'),
	('B'),
	('C');

因为需求变化,需要使用ratings存储数值,如:1,2,3代替A,B,C:

INSERT INTO ratings (rating)
VALUES
	(1),
	(2),
	(3);

查询数据:

select * from  ratings ;

输出:

1	"A"
2	"B"
3	"C"
4	"1"
5	"2"
6	"3"

现在我们需要转换rating列所有值为数值,A,B,C转为0,下面使用case表达式结合cast操作实现查询:

SELECT
	id,
	CASE
		WHEN rating~E'^\\d+$' THEN
			CAST (rating AS INTEGER)
		ELSE
			0
		END as rating
FROM
	ratings;

输出:

1	0
2	0
3	0
4	1
5	2
6	3

case检查rating,如果匹配整数模式,则转换为整数,否则返回0.

3. 总结

本文学习了如何使用PostgreSQL CAST转换数据类型,并通过几个实例展示多种数据类型之间转换。

### PostgreSQL 中的数据类型转换方法 在 PostgreSQL 中,可以使用多种方式来进行数据类型之间的转换。主要通过 `CAST` 函数或使用类型强制语法来实现。 #### 使用 CAST 函数 当需要显式地将一种数据类型转换为另一种时,推荐使用 `CAST` 函数。这不仅提高了 SQL 语句的可读性和标准化程度,而且有助于避免潜在错误。例如: ```sql SELECT CAST('10' AS integer); ``` 这条命令会把字符串 `'10'` 转换成整数类型的数值 `10`[^1]。 对于更复杂的表达式也可以应用同样的逻辑: ```sql UPDATE table_name SET column_integer = CAST(column_text AS integer) WHERE condition; ``` 这里展示了更新表内某列值的过程,在此过程中进行了从文本到整数的数据类型转换。 #### 类型强制语法 除了 `CAST` 外,还可以采用更为简洁的形式——即直接跟上目标类型的冒号形式完成相同的操作: ```sql SELECT '10'::integer; ``` 这种写法同样实现了由字符窜向整数转变的效果,并且更加直观易懂[^3]。 需要注意的是并非所有的组合都能成功执行转换操作;如果尝试非法转换则会产生异常情况。因此建议开发者熟悉各种基本数据间的兼容关系并谨慎处理可能引发的问题。 另外值得注意的一点是在某些情况下自动隐式的类型转换也会发生,比如两个不同但相互关联紧密的数据类型之间运算的时候。然而为了代码清晰度以及减少意外行为的发生频率,还是提倡尽可能多地利用上述两种显示的方式来做必要的调整工作。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值