我有一些以UTC记录的销售数据。我正在尝试将其转换为销售发生的当地时区。
我建立了如下查询,但收到一条错误消息,提示操作无效:函数to_char(无时区的时间戳,字符变化,未知”)不存在。
select fs.sale_id,fs.store_type,fs.sale_time ,
case when fs.timezone = 'BST' then dateadd( h, 1, fs.sale_time ) when fs.timezone = 'EDT' then dateadd( h,- 4, fs.sale_time ) when fs.timezone = 'CEST' then dateadd( h, 2, fs.sale_time ) when fs.timezone = 'EEST' then dateadd( h, 3, fs.sale_time ) when fs.timezone = 'MSK' then dateadd( h, 3, fs.sale_time ) when fs.timezone = 'WEST' then dateadd( h, 1, fs.sale_time ) else null end, fs.timezone as new_time
from sales fs
where to_char((case when fs.timezone = 'BST' then dateadd( h, 1, fs.sale_time ) when fs.timezone = 'EDT' then dateadd( h,- 4, fs.sale_time ) when fs.timezone = 'CEST' then dateadd( h, 2, fs.sale_time ) when fs.timezone = 'EEST' then dateadd( h, 3, fs.sale_time ) when fs.timezone = 'MSK' then dateadd( h, 3, fs.sale_time ) when fs.timezone = 'WEST' then dateadd( h, 1, fs.sale_time ) else null end, fs.timezone),'yyyy-mm-dd') = '2018-09-01'
任何人都可以建议我如何修改此查询。我正在使用redshift DB。谢谢。
答案 0 :(得分:2)
我建议使用“ CONVERT_TIMEZONE”功能,详细信息在下面列出。
https://docs.aws.amazon.com/redshift/latest/dg/CONVERT_TIMEZONE.html
例如,您简单的查询就可以将销售从UTC转换为EST,如下所示。
select listtime, convert_timezone('PST', listtime) from listing where listid = 16;
它将返回类似下面的内容。
listtime | convert_timezone
--------------------+-------------------
2008-08-24 09:36:12 2008-08-24 01:36:12
答案 1 :(得分:1)
尝试以下方法:您遇到语法错误
select fs.sale_id,fs.store_type,fs.sale_time ,
case when fs.timezone = 'BST' then dateadd( h, 1, fs.sale_time )
when fs.timezone = 'EDT' then dateadd( h,- 4, fs.sale_time )
when fs.timezone = 'CEST' then dateadd( h, 2, fs.sale_time )
when fs.timezone = 'EEST' then dateadd( h, 3, fs.sale_time )
when fs.timezone = 'MSK' then dateadd( h, 3, fs.sale_time )
when fs.timezone = 'WEST' then dateadd( h, 1, fs.sale_time ) else null end, fs.timezone as new_time
from sales fs
where to_char(
case when fs.timezone = 'BST' then dateadd( h, 1, fs.sale_time )
when fs.timezone = 'EDT' then dateadd( h,- 4, fs.sale_time )
when fs.timezone = 'CEST' then dateadd( h, 2, fs.sale_time )
when fs.timezone = 'EEST' then dateadd( h, 3, fs.sale_time )
when fs.timezone = 'MSK' then dateadd( h, 3, fs.sale_time )
when fs.timezone = 'WEST' then dateadd( h, 1, fs.sale_time ) else null end,
'yyyy-mm-dd') = '2018-09-01'
答案 2 :(得分:1)
请尝试
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='city' value="123" />
<input type="button" id='btnChange' value="Change" onclick="add();return false;" />
<script>
function add() {
$("#city").val("abc");
}
</script>
我认为您有多余的“,fs.timezone”的复制粘贴问题。
我也认为这是错误的查询。如果table大而在where子句中有这么大的功能,那将被杀死。