我有一个格式为varchar的日期,看起来像-
7/14/2015 8:22:39 AM
我已经看过presto文档并尝试了各种各样的东西(cast, date_format,使用split_part来解析然后cast),并且没有将此转换为我可以与date_diff等函数一起使用的日期格式。
我试过:
cast(fieldname as timestamp)
date_format(fieldname, '%Y-%m-%d %T)
都给出如下错误
'Value cannot be cast to timestamp: 3/31/2016 6:05:04 PM'
我如何转换这个?
我明白了。下面的工作将其转换为24小时日期格式。
select date_parse('7/22/2016 6:05:04 PM','%m/%d/%Y %h:%i:%s %p')
参见Presto的date_parse
文档
你也可以这样做
日期(cast(2016-03-22 15:19:34.0的时间戳))
使用:cast(date_parse(inv.date_created,'%Y-%m-%d %h24:%i:%s') as date)
输入:String timestamp
输出:date format 'yyyy-mm-dd'
将具有Int格式日期的DateID转换为日期格式:Presto Query
Select CAST(date_format(date_parse(cast(dateid as varchar(10)), '%Y%m%d'), '%Y/%m-%d') AS DATE)
from
Table_Name
limit 10;
select date_format(date_parse(t.payDate,'%Y-%m-%d %H:%i:%S'),'%Y-%m-%d') as payDate
from testTable t
where t.paydate is not null and t.paydate <> '';
如果字符串是ISO 8601格式,还可以使用from_iso8601_timestamp
date_format
要求第一个参数为timestamp
,因此不是转换字符串的最佳方式。用date_parse
代替。
同样,使用%c
表示不加零的月份,%e
表示不加零的月份,%Y
表示四位数字的年份。
SELECT date_parse('7/22/2016 6:05:04 PM', '%c/%e/%Y %r')
SQL 2003标准定义的格式如下:
<unquoted timestamp string> ::= <unquoted date string> <space> <unquoted time string>
<date value> ::= <years value> <minus sign> <months value> <minus sign> <days value>
<time value> ::= <hours value> <colon> <minutes value> <colon> <seconds value>
有一些定义之间,只是链接到这些,但简而言之,YYYY-MM-DD HH:MM:SS
与可选的.mmm
毫秒需要在所有SQL数据库上工作
如果您需要从时间戳转换为日期,您也可以使用date()
函数,就像mySQL一样:
select date(your_date_colunm_name) as new_date_colunm