簡體   English   中英

SQL (Snowflake):我可以用一個虛擬列做另一個虛擬列嗎? 如果沒有,解決方法是什么?

[英]SQL (Snowflake): Can I use a virtual column to make another virtual column? If not, what's the workaround?

所以,我有兩列是 unix/epoch 格式(以毫秒為單位)。 我相應地轉換它們:

dateadd(S, TIME_START/1000, '1970-01-01') AS J_Start, 

dateadd(S, TIME_END/1000, '1970-01-01') AS J_End, 

我想要另一個帶有差異的列。 但是,當我嘗試執行 J_Start - J_End 時,我得到一個無效的標識符錯誤。 有沒有辦法解決? 我也嘗試過相互減去完整的轉換語法,但無濟於事......

我正在考慮創建一個虛擬表,然后將其加入原始表,但我仍然會遇到上述問題:Generating a virtual column from other, pre-existing one(s)

這個對我有用:

select 5 as a, 1 as b, a-b as c;
+---+---+---+
| A | B | C |
|---+---+---|
| 5 | 1 | 4 |
+---+---+---+

除非我沒有完全理解這個問題。

如果您的完整查詢帶有確切的錯誤消息,它會有所幫助。

您可以使用datediff獲取差異。 我以天為單位計算差異,但您可以根據需要更改它。 雙引號不是錯誤的原因,但您並不需要它們。 只需使用不與保留關鍵字沖突的列名。

select datediff(day, dateadd(S, j_start/1000, '1970-01-01'),dateadd(S, j_end/1000, '1970-01-01'))

您也可以使用簡單的減法,但您必須先將 dateadd 的dateadddate 上面那個更容易維護和修改

select dateadd(S, j_start/1000, '1970-01-01')::date - dateadd(S, j_end/1000, '1970-01-01')::date

如果你真的想在同一個 select 中重用列別名,我不喜歡,你可以這樣做

select dateadd(S, j_start/1000, '1970-01-01')::date as j_start,
       dateadd(S, j_end/1000, '1970-01-01')::date as j_end,
       b-a as diff_days

話雖如此,如果您只需要以毫秒表示的兩個日期之間的差異,那么使用 1970 還是 1800 都沒有關系。只要做

select floor((time_end-time_start) / (1000 * 60 * 60 * 24)) as diff_days

在雪花中,您可以在其他部分中引用 SELECT 部分的命名 object,並且解析最“明白你的意思”,因此在雪花中:

SELECT 
     '2021-12-16' AS date_string,
     to_date(date_string) as datetime_a,
     dateadd('day', 1, date_time_a) AS a_day_later,
     date_diff('hours', datetime_a, a_day_later);

很好,並且會給出以下結果:

"2021-12-16", 2021-12-16, 2021-12-17, 24

因此,在 SQL 中,我就您的位置問題給了您,我指的是剛剛宣布的事情。

您看到的錯誤是不支持減去日期的事實,因為您想要答案的格式是什么? 因此使用date_diff

我們可以使用現有的列別名並構建一些計算。下面是使用您的 var 的示例:

  select
    to_timestamp('2021-01-01T00:00:00')::timestamp as "J_Start" ,to_timestamp('2021-02-01T00:00:00')::timestamp as "J_end",
    date_part(epoch_second, "J_Start") as "Epcoh_JSTART",
    date_part(epoch_second, "J_end") as "Epcoh_JEND",
    "Epcoh_JSTART" - "Epcoh_JEND";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM