-
我们可以使用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')
<在这个例子中,为什么我们需要";日期";让它发挥作用?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
我以不同的顺序回答问题,因为存在一些错误的假设:
问题3
'2017-06-02'
和date '2017-06-02'
之间有一个普遍的区别-第一个只是varchar,一个字符串,Redshift没有将其作为日期处理,第二个是告诉Redshift将字符串作为日期处理并因此工作。
问题2
日期数据类型列没有格式-您可以使用sql客户端以不同格式显示日期列,但这不是redshift的功能。SELECT to_date ('02 Oct 2001', 'DD Mon YYYY');
告诉红移将字符串'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'