Postgres 数据类型转换
Posted
技术标签:
【中文标题】Postgres 数据类型转换【英文标题】:Postgres data type cast 【发布时间】:2012-11-20 12:56:09 【问题描述】:我的数据库是 Postgres 8。我需要将数据类型转换为另一个。这意味着,其中一种列数据类型是 varchar
,需要在 SELECT
语句中使用 Postgres 将其转换为 int
。
目前,我获取字符串值并将其转换为 Java 中的int
。
有什么办法吗?示例代码将不胜感激。
【问题讨论】:
仅供参考,说“PostgreSQL 8”有点像说“Windows 6”。 Windows XP 为 5.1(或 x64 为 5.2),Vista 为 6.0,Windows 7 为 6.1。他们都很不一样! PostgreSQL 也一样; PostgreSQL 8.0 和 8.4 之间有 5 年的时间和巨大的技术差异,所以请始终指定 完整 版本。 【参考方案1】:<b>cast(varchar_col AS int)</b> -- SQL standard
或
<b>varchar_col::int</b> -- Postgres syntax shorthand
这些语法变体在任何地方都有效(几乎)。第二种在特殊情况下可能需要嵌套括号:
PostgreSQL: Create index on length of all table fields如果语法限制只允许功能符号,则可能需要第一个:
PostgreSQL - CAST vs :: operator on LATERAL table function还有两种变体:
int4(varchar_col) -- only works for some type names
int '123' -- must be an untyped, quoted string literal
注意我是如何写的int4
(varchar_col)
。那是内部类型名称,并且还为它定义了一个函数。不能用作 或 integer()
。int()
另请注意,最后一种形式不适用于 array 类型。 必须是 int[] '1,2,3'
'1,2,3'::int[]
或 cast('1,2,3' AS int[])
。
手册中的详细信息here 和here。
要对integer
有效,字符串必须由可选的前导符号 (+
/-
) 后跟数字组成。前导/尾随空格被忽略。
【讨论】:
如果列是字符数据类型则不起作用 @AbelMelquiadesCallejo:“它”是什么?以上所有内容都适用于数据类型character
(除非明确指出)。当然,字符串必须是有效的整数。以上是关于Postgres 数据类型转换的主要内容,如果未能解决你的问题,请参考以下文章
postgres 将字符串插入数字列 - 不会发生自动类型转换
升级 JDBC 驱动程序后,Postgres 中到整数的隐式类型转换失败
postgres - bigint超出范围错误,用于非常大的数字的数据类型