String 在Impala中将字符串转换为时间戳
如何将表示日期时间的String 在Impala中将字符串转换为时间戳,string,casting,timestamp,impala,String,Casting,Timestamp,Impala,如何将表示日期时间的字符串转换为适当的时间戳 我原以为这样行得通,但事实并非如此 select from_unixtime(unix_timestamp(`date`, "YYYY-MM-DD;HH:MM:SS")) from t1 limit 100; 正如@jbapple在对我的问题的评论中所建议的,问题在于资本化。如Impala文件所述 目前,格式字符串区分大小写,特别是对于 区分m表示分钟,m表示月。在黑斑羚1.3及更高版本中, 您可以切换元素的顺序,使用可选分隔符 字符,并为每
字符串
转换为适当的时间戳
我原以为这样行得通,但事实并非如此
select
from_unixtime(unix_timestamp(`date`, "YYYY-MM-DD;HH:MM:SS"))
from t1
limit 100;
正如@jbapple在对我的问题的评论中所建议的,问题在于资本化。如Impala文件所述 目前,格式字符串区分大小写,特别是对于 区分m表示分钟,m表示月。在黑斑羚1.3及更高版本中, 您可以切换元素的顺序,使用可选分隔符 字符,并为每个单元使用不同数量的占位符。 添加更多的y、d、H等实例将生成输出字符串 零填充到请求的字符数。M是个例外 对于月,其中M产生非填充值,例如3,MM产生 零填充值(如03,MMM)生成一个缩写的月份名称 例如Mar和4个或更多M的序列是不允许的。约会 包含所有字段的字符串可以是“yyyy-MM-dd HH:MM:ss.ssss”, “dd/MM/yyyy HH:MM:ss.ssss”、“MMM dd,yyyy HH.MM.ss(SSSSSS)”或 占位符和分隔符的其他组合 正确的书写方式是:
select
from_unixtime(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss"))
from t1
limit 100;
_unixtime()的
返回类型不是“正确的时间戳”
,而是字符串。(并且unix\u timestamp()
的返回类型不是…一个timestamp
,而是一个bigint
)
下面是我如何获得时间戳
返回类型:
select
cast(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss") as timestamp)
from t1
limit 100;
为完整起见,以下是我如何处理时区、本地格式化日期并将其存储为UTC时间戳:
select
to_utc_timestamp(cast(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss") as timestamp), "Europe/Paris")
from t1
limit 100;
这假设-use_local_tz_for_unix_timestamp_conversions
启动标志已关闭(这是默认设置)。涉及unix_timestamp
的所有答案都不适用于我在Cloudera v5上运行Impala的情况。
但是一个简单的选择cast('1985-09-2517:45:30.005'作为时间戳)代码>工作
参见此此返回“警告:错误的日期/时间转换格式:YYYY-MM-DD;HH:MM:SS”。如果你读了手册,它说资本化很重要。这是:。您正在查找关于from_unixtime的部分,以解释如何在unix_时间戳中使用该格式。