繁体   English   中英

sql: select 列列表

[英]sql: select list of columns

我想传递一个 str 或 list 参数,并希望 sql 知道如何处理它。 list_col='date1, date2, date3, date4'最后我想要 dataframe date1, date2, date3, id

query = """
    SELECT {list_col} AT TIME ZONE 'Europe/Paris' as {list_col}, {table}.{id}
    FROM {table} 
    ORDER BY {table}.{id}
"""

def fun_query(table_name, list_col, id):
    return query.format(table=table_name, list_col=list_col, id=id)

请问有人知道怎么做吗?

正如已经指出的那样,这以您建议的方式不可行,因为AT TIME ZONEAS子句都应与每列一起出现。 我建议做这样的事情。

query = """
    SELECT {date_cols_as_tz}, {table}.{id}
    FROM {table} 
    ORDER BY {table}.{id}
"""


def fun_query(table_name, list_col, id, tz="'Europe/Paris'"):
    date_cols_as_tz = ",".join((f"{c} AT TIME ZONE {tz} as {c}" for c in list_col))
    return query.format(date_cols_as_tz=date_cols_as_tz, table=table_name, list_col=list_col, id=id)

当您调用例如fun_query("my_table", ["date1", "date2"], "table_id")并打印它时,您会得到以下查询:

SELECT date1 AT TIME ZONE 'Europe/Paris' as date1,date2 AT TIME ZONE 'Europe/Paris' as date2, my_table.table_id
FROM my_table 
ORDER BY my_table.table_id

主要变化是:

  • fun_query中创建date_cols_as_tz
  • list_col参数使用真实列表(不是像"date1,date2"这样的字符串,而是像["date1", "date2"]这样的列表)
  • 向 function 添加了可选的tz参数

此解决方案的优点是您可以通过使用不同的tz值而不是硬编码值来轻松更改时区。

另请注意,此 function 预计list_col中的所有列都是日期(但如果我正确理解您的问题,这可能是您所期望的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM