我想在Teradata中使用它:
更新了SQL以获得更好的示例
select
case
when
current_date between
cast('03-10-2013' as date format 'mm-dd-yyyy') and
cast('11-03-2013' as date format 'mm-dd-yyyy')
then 4
else 5
end Offset,
(current_timestamp + interval Offset hour) GMT
但是,我收到Expected something like a string or a Unicode character blah blah
的错误。看来你必须像这样对间隔进行硬编码:
select current_timestamp + interval '4' day
是的,我知道我在第一个例子中对其进行了硬编码,但这只是为了证明计算结果。
如果您必须知道,我必须将几张桌子中的所有日期和时间转换为GMT,但我必须考虑夏令时。我在东部,所以如果日期在DST时间范围内,我需要增加4个小时,否则增加5个小时。
我知道我可以为每个句点创建单独的更新语句,并相应地将值从4更改为5,但我希望我的查询是动态且智能的。
答案 0 :(得分:5)
以下是解决方案:
select
case
when
current_date between
cast('03-10-2013' as date format 'mm-dd-yyyy') and
cast('11-03-2013' as date format 'mm-dd-yyyy')
then 4
else 5
end Offset,
(current_timestamp + cast(Offset as interval hour)) GMT
您必须实际将case语句的返回值转换为间隔。我甚至不知道Teradata中存在的区间类型。感谢这个页面帮助我:
答案 1 :(得分:4)
如果我理解正确,您希望将间隔乘以某个数字。信不信由你,这就是你需要做的所有事情:
select current_timestamp as right_now
, right_now + (interval '1' day) as same_time_tomorrow
, right_now + (2 * (interval '1' day)) as same_time_next_day
由于某些原因,间隔时间一直在挑战我;我不经常使用它们。但是我在Teradata的“备忘单”中已经有了这个小小的例子了很长一段时间。
答案 2 :(得分:0)
两个评论:
在Teradata中编写日期文字的推荐方法是DATE'YYYY-MM-DD'而不是CAST / FORMAT
select
case
when current_date between DATE '2013-03-10' and DATE '2013-11-03'
then interval '4' hour
else interval '5'hour
end AS Offset,
current_timestamp + Offset AS GMT