PostgreSQL - 如何动态转换数据类型?

3

我有一个包含数据集类型的文本列。

因此,我想要做这样的事情:

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

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

PostgreSQL 能实现这个吗?


我目前不确定这是否可能。但我很好奇,你如何定义 WHERE id = 2?我的意思是,如果你知道要查找哪种数据类型,则已经知道数据类型了,对吧? - Jorge Campos
而且,这可能会对你有所帮助:https://dev59.com/mW865IYBdhLWcg3wat2l#43781719 - Jorge Campos
这实际上是不可能的——除非您使用动态SQL。列的类型在“SELECT”中是固定的,它不是可变的。 - Gordon Linoff
不,这是不可能的。PostgreSQL 的语法解析器在此处拒绝任何动态元素。即使可能,您也必须确保源类型和目标类型之间的转换实际上是可行的。您是否有具体的原因认为需要数据库而不是应用程序来执行此操作? - Ancoron
1个回答

3

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

或者您可以采用两步流程。首先将查询字符串连接起来(使用另一个SELECT查询)。然后执行生成的查询字符串。向服务器发送两个请求。

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

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

关于短转换语法:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接