Gia*_*uca 2 string timestamp casting impala
如何将string表示格式"YYYY-MM-DD;HH:MM:SS"(即2016-04-11;19:38:01)的日期时间转换为正确的timestamp?
我认为这会奏效,但事实并非如此.
select
from_unixtime(unix_timestamp(`date`, "YYYY-MM-DD;HH:MM:SS"))
from t1
limit 100;
Run Code Online (Sandbox Code Playgroud)
返回类型from_unixtime()不是"正确的timestamp"而是字符串.(并且返回类型unix_timestamp()不是...... a timestamp,而是a bigint).
这是我做的timestamp返回类型:
select
cast(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss") as timestamp)
from t1
limit 100;
Run Code Online (Sandbox Code Playgroud)
为了完整起见,以下是我如何处理时区,本地格式化日期以及将它们存储为UTC时间戳:
select
to_utc_timestamp(cast(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss") as timestamp), "Europe/Paris")
from t1
limit 100;
Run Code Online (Sandbox Code Playgroud)
这假设-use_local_tz_for_unix_timestamp_conversions启动标志关闭(这是默认值).
正如@jbapple在对我的问题的评论中所建议的那样,问题在于大写.如Impala文档中所述
目前,格式字符串区分大小写,尤其是区分m表示分钟,M表示月份.在Impala 1.3及更高版本中,您可以切换元素的顺序,使用替代分隔符,并为每个单元使用不同数量的占位符.添加更多y,d,H等实例会将输出字符串填充为填充到请求的字符数.例外情况是M为几个月,其中M产生非填充值,例如3,MM产生零填充值,例如03,MMM产生缩写的月份名称,例如Mar,并且不允许4个或更多M的序列.包含所有字段的日期字符串可以是"yyyy-MM-dd HH:mm:ss.SSSSSS","dd/MM/yyyy HH:mm:ss.SSSSSS","MMM dd,yyyy HH.mm.ss"(SSSSSS )"或占位符和分隔符的其他组合.
正确的写作方式是:
select
from_unixtime(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss"))
from t1
limit 100;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34308 次 |
| 最近记录: |