HOWTO · PostgreSQL
在 PostgreSQL 中将整数转换为字符串
本教程讨论如何在 PostgreSQL 中将整数转换为字符串。
本页内容
在 PostgreSQL 中将整数转换为字符串,可以使用 CAST(value AS text),或 PostgreSQL 的 value::text 语法,将其转换为 text 类型。查询需要文本值时可使用其中任一写法;若要组合文本与其他类型的值,则使用 CONCAT。下方 SQL 片段展示语法,不附带运行时输出。
使用 CAST 将整数转换为 text
CAST 是标准 SQL 语法,可明确指出源类型和目标类型。例如,SELECT CAST(123 AS text) AS string_value; 会返回一个包含 123 的 text 类型值。当查询需要以文本形式使用某个值时,可以将整数常量替换为列或表达式,例如 CAST(order_id AS text)。PostgreSQL 将其字符字符串类型称为 text;“字符串”是对所表示值的一般称呼。
使用 PostgreSQL 的 :: 类型转换运算符
PostgreSQL 也支持简洁的 :: 类型转换运算符。SELECT 123::text AS string_value; 会将同一个整数转换为与 CAST 写法相同的类型。在共享 SQL 中,如果显式写法更易读,可以选择它;如果运算符更适合周围的 PostgreSQL 查询,也可以使用运算符。两种写法都表示类型转换;它们都不是添加分隔符、填充字符或其他显示格式的指令。
在 WHERE 子句中比较文本列与整数
假设 quiz_score.score 定义为 text,而要比较的值是整数。直接将 score 与 100 比较会混用文本和整数类型。将整数一侧转换为 text,使两边的类型兼容:SELECT score FROM quiz_score WHERE score = CAST(100 AS text);。PostgreSQL 的简写形式为 WHERE score = 100::text。
这种比较会将列值视为文本。例如,文本值 100 和 0100 是不同的,即使它们都可以表示同一个数字。如果实际要进行数值比较,只有在列中的值都是有效整数时,才能将该列转换为整数;否则转换可能失败。对于本身就是数值类型的列,应直接与数值比较,而不要将其转换为文本。
使用 CONCAT 组合文本与数字
CONCAT 会组合多个参数,并将非文本参数转换为文本,以生成组合后的结果。例如,SELECT CONCAT('The number is ', 123); 会构成文本 The number is 123。这适合拼接标签或消息,但它不是单独进行类型转换的第三种写法:如果查询需要转换后的整数本身,请使用 CAST 或 ::text。在 PostgreSQL 中,CONCAT 会忽略 NULL 参数。如果 value 可能是非文本类型,并且需要提供替代值,可以使用 COALESCE(value::text, 'fallback');类型转换会让 COALESCE 的两个参数具有相同类型。
常见问题
CAST 和 :: 有什么区别? CAST(value AS text) 是标准 SQL 语法;value::text 是 PostgreSQL 专用的简写。两者都会将值转换为 text。
其他值也可以转换为 text 吗? PostgreSQL 支持将许多类型转换为 text,包括日期和布尔值。转换后的文本表示取决于源类型及其输出表示形式。
可以在 WHERE 子句中使用类型转换吗? 可以。将整数参数或表达式转换为 text,再与文本列比较,例如 score = 100::text。请确认两边的值具有相同的预期含义和类型。