受到 slected answer to Declare a variable in RedShift 的启发,我尝试将查询结果用作 to_char
函数调用中的 format
值:
WITH tmp_variables as (
select 'YYYY-MM-DD' as date_format
)
SELECT to_char(OrderDate, (SELECT date_format FROM tmp_variables)) FROM Orders
但是我收到一个错误
<块引用>TO_CHAR 参数:第二个输入必须是字符串文字
如何将 tmp_variables
的 date_format
值用作 to_char
format
而不会出错,或者是否有替代使用 to_char
的方法,其中这行得通吗?
答案 0 :(得分:1)
SELECT 是一个处理数据的 SQL 运算符。 SQL 在它可以对数据进行操作之前被编译。基本的答案是这不会像书面的那样工作。
您在问题中试图实现的目标并不清楚 - 出于某些原因更改日期输出格式以用于某些查询集而不是其他查询?在一般情况下,您需要修改进入编译器的 SQL,这意味着读取一些配置并将其合并到 SQL 文本中。如果用例更加有限,则可能有另一种方法来实现所需的结果,但仅限于某些限制范围内。
一些可能性 - 您可以使用格式文字设置 SQL 变量。如果有能力,您的客户可以读取信息并修改查询本身。可以使用存储过程。 SQL 修饰符(pg_bouncer?)可以存在于客户端和集群之间,并根据其他一些因素替换字符串。每一种都有局限性和成本。
如果你能描述用例,它可以产生不同/更好的方法。