繁体   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