首页 > 解决方案 > PostgreSQL - 如何动态投射?

问题描述

我有一列具有文本数据集的类型。

所以我想做这样的事情:

SELECT CAST ('100' AS %INTEGER%);
SELECT CAST (100 AS %TEXT%);

SELECT CAST ('100' AS (SELECT type FROM dataset_types WHERE id = 2));

PostgreSQL有可能吗?

标签: sqldatabasepostgresql

解决方案


SQL 是强类型和静态的。Postgres 要求在调用时知道列数及其数据类型。因此,您需要在其中一种过程语言扩展中使用动态 SQL。然后您仍然面临函数(必然)具有固定返回类型的障碍。有关的:

或者你采用两步流程。首先连接查询字符串(与另一个SELECT查询)。然后执行生成的查询字符串。两次往返服务器。

  1. SELECT '100::' || type FROM dataset_types WHERE id = 2; -- 记录结果字符串

  2. 执行结果。(并确保您没有为 SQL 注入打开任何向量!)

关于短转换语法:


推荐阅读