簡體   English   中英

Date_Trnc 和 To_Date 問題 SQL

[英]Date_Trunc and To_Date Questions SQL

  1. 我們可以將 date_trunc 用於我們試圖“截斷”(不確定該術語是否可以在此處應用)的日期(不是日期時間)到例如一周的開始? 因此,如果我有date_trunc(week, 28/10/2020)並且我想獲得 10 月 28 日所在的那一周的開始(即 10 月 26 日)? 我在 SQL 命令行中嘗試過此操作,但收到錯誤消息。

  2. 如果我正在做: SELECT to_date ('02 Oct 2001', 'DD Mon YYYY'); 如何確保生成的格式是我指定的日期格式(而不是默認日期格式)? 例如,如果我想要 DD-MM-YYYY 格式?

  3. select to_char(date '2017-06-02', 'MM') < 在這個例子中,為什么我們需要“date”才能工作? to_char 的一般格式應該是 TO_CHAR (timestamp_expression, 'format')。 在這種通用格式中,我沒有看到我們需要“天”。

  4. 如果我有一個像to_char(order_date, '20-10-2020')這樣的 WHERE 過濾器,並且確實有一些具有此訂單日期的行,如果這些行在 DATE 中,這些行是否仍會顯示在我的結果中(運行查詢后)格式(所以 20 Oct 是日期格式)而不是字符串(這是我在做 to_char 時過濾的內容)。 我知道在這種情況下不需要使用 to_char 而只是問..

  1. 是的,您可以以文本形式使用日期,但您必須將其轉換為正確的類型

這些查詢將起作用

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";

  1. 您可以使用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;
  1. '2017-06-02' 是文本,不能自動轉換為時間戳。 其實我不知道可以的文本格式。

  2. 不,您需要顯式轉換為date類型才能將其用作過濾器

where order_date = date_stored_as_a_text::date

我以不同的順序回答問題,因為有一些錯誤的假設:

問題 3

'2017-06-02'date '2017-06-02'之間有一個普遍的區別 - 第一個只是一個 varchar,一個字符串,不被 Redshift 處理為日期,第二個告訴 Redshift 處理字符串作為日期,因此有效。

問題2

日期數據類型列沒有格式 - 您可以使用可以以不同格式顯示日期列的 sql 客戶端,但是,這不是 redshift 的功能。 SELECT to_date ('02 Oct 2001', 'DD Mon YYYY'); 告訴 redshift 將字符串'02 Oct 2001'轉換為日期。

問題 1

DATE_TRUNC('datepart', timestamp)也支持周作為日期部分- 請參閱日期或時間戳函數的日期部分也顯示在 AWS 的示例中)。 您還應該能夠提供日期而不是時間戳。

問題 4

to_char(order_date, '20-10-2020')不是過濾器,你用錯了。

AWS TO_CHAR

TO_CHAR 將時間戳或數字表達式轉換為字符串數據格式。

我猜你是在尋找:

where to_char(order_date, 'YYYY-MM-DD') = '20-10-2020'

暫無
暫無

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

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