[英]Date_Trunc and To_Date Questions SQL
我們可以將 date_trunc 用於我們試圖“截斷”(不確定該術語是否可以在此處應用)的日期(不是日期時間)到例如一周的開始? 因此,如果我有date_trunc(week, 28/10/2020)
並且我想獲得 10 月 28 日所在的那一周的開始(即 10 月 26 日)? 我在 SQL 命令行中嘗試過此操作,但收到錯誤消息。
如果我正在做: SELECT to_date ('02 Oct 2001', 'DD Mon YYYY');
如何確保生成的格式是我指定的日期格式(而不是默認日期格式)? 例如,如果我想要 DD-MM-YYYY 格式?
select to_char(date '2017-06-02', 'MM')
< 在這個例子中,為什么我們需要“date”才能工作? to_char 的一般格式應該是 TO_CHAR (timestamp_expression, 'format')。 在這種通用格式中,我沒有看到我們需要“天”。
如果我有一個像to_char(order_date, '20-10-2020')
這樣的 WHERE 過濾器,並且確實有一些具有此訂單日期的行,如果這些行在 DATE 中,這些行是否仍會顯示在我的結果中(運行查詢后)格式(所以 20 Oct 是日期格式)而不是字符串(這是我在做 to_char 時過濾的內容)。 我知道在這種情況下不需要使用 to_char 而只是問..
這些查詢將起作用
select date_trunc('week', '2020-10-28'::date);
select date_trunc('week', '10/28/2020'::date);
-- as well as
select date_trunc('week', '2020-10-28'::datetime);
並返回時間戳2020-10-26 00:00:00.000000
注意,下一個查詢
select date_trunc('week', '28/10/2020'::date);
將失敗,錯誤date/time field value out of range: "28/10/2020";
to_char
,它返回text
,如果您需要日期格式,則必須再次區分大小寫select to_char( to_date ('02 Oct 2001', 'DD Mon YYYY'), 'DD-MM-YYYY')::date;
select to_char('02 Oct 2001'::date, 'DD-MM-YYYY')::date;
'2017-06-02' 是文本,不能自動轉換為時間戳。 其實我不知道可以的文本格式。
不,您需要顯式轉換為date
類型才能將其用作過濾器
where order_date = date_stored_as_a_text::date
我以不同的順序回答問題,因為有一些錯誤的假設:
'2017-06-02'
和date '2017-06-02'
之間有一個普遍的區別 - 第一個只是一個 varchar,一個字符串,不被 Redshift 處理為日期,第二個告訴 Redshift 處理字符串作為日期,因此有效。
日期數據類型列沒有格式 - 您可以使用可以以不同格式顯示日期列的 sql 客戶端,但是,這不是 redshift 的功能。 SELECT to_date ('02 Oct 2001', 'DD Mon YYYY');
告訴 redshift 將字符串'02 Oct 2001'
轉換為日期。
DATE_TRUNC('datepart', timestamp)
也支持周作為日期部分- 請參閱日期或時間戳函數的日期部分( 也顯示在 AWS 的示例中)。 您還應該能夠提供日期而不是時間戳。
to_char(order_date, '20-10-2020')
不是過濾器,你用錯了。
TO_CHAR 將時間戳或數字表達式轉換為字符串數據格式。
我猜你是在尋找:
where to_char(order_date, 'YYYY-MM-DD') = '20-10-2020'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.