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[])

手册中的详细信息herehere

要对integer 有效,字符串必须由可选的前导符号 (+/-) 后跟数字组成。前导/尾随空格被忽略。

【讨论】:

如果字符数据类型则不起作用 @AbelMelquiadesCallejo:“它”是什么?以上所有内容都适用于数据类型character(除非明确指出)。当然,字符串必须是有效的整数。

以上是关于Postgres 数据类型转换的主要内容,如果未能解决你的问题,请参考以下文章

固定大小字符串的 Postgres 数据类型

postgres 将字符串插入数字列 - 不会发生自动类型转换

升级 JDBC 驱动程序后,Postgres 中到整数的隐式类型转换失败

postgres - bigint超出范围错误,用于非常大的数字的数据类型

如何使用 PySpark 将 JSON 列类型写入 Postgres?

将 json 转换为嵌套的 postgres 复合类型