与Select All Columns Except Some in Google BigQuery?类似 - 我们希望从表中SELECT *
,但我们希望用一些表达式替换它们,而不是排除某些列。例如,给定的列包含name, start_date, amount, end_date, comment
列,我们希望将start
和end
从STRING
转换为DATE
。可以写
SELECT
* EXCEPT(start_date, end_date),
CAST(start_date AS DATE) start_date,
CAST(end_date AS DATE) end_date
但是这会改变从开始和结束到结尾的列的顺序。
答案 0 :(得分:2)
除了SELECT * EXCEPT
之外,Google BigQuery还支持标准SQL方言中的SELECT * REPLACE
子句。可以在此处找到文档:https://cloud.google.com/bigquery/sql-reference/query-syntax#select-list
你的例子将成为:
SELECT * REPLACE(
CAST(start_date AS DATE) AS start_date,
CAST(end_date AS DATE) AS end_date)
FROM T
答案 1 :(得分:2)
我会更进一步说 - 您可以将EXCEPT
和REPLACE
链接到同一SELECT
中
从文档中看不是那么明显,所以我觉得它很有价值
例如
SELECT * EXCEPT(end_date) REPLACE(
CAST(start_date AS DATE) AS start_date
FROM T
这将从输出结束中删除end_date
替换原始start_date
并将其转换为日期start_date