[英]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.