我在presto上并且日期格式为varchar,看起来像 -
7/14/2015 8:22:39 AM
我查看了presto文档并尝试了各种各样的东西(cast,date_format,使用split_part进行解析然后转换)并且我没有将其转换为可以与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'
如何转换此内容?
答案 0 :(得分:26)
我明白了。以下内容适用于将其转换为24小时日期格式。
select date_parse('7/22/2016 6:05:04 PM','%m/%d/%Y %h:%i:%s %p')
答案 1 :(得分:1)
将具有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;
答案 2 :(得分:1)
使用:cast(date_parse(inv.date_created,'%Y-%m-%d %h24:%i:%s') as date)
输入:String timestamp
输出:date format 'yyyy-mm-dd'
答案 3 :(得分:1)
您还可以执行类似的操作
日期(播放(以“ 2016-03-22 15:19:34.0”作为时间戳记))
答案 4 :(得分:0)
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数据库上工作。
答案 5 :(得分:0)
while (true)
{
data = new byte[1024];
if (port != 0)
{
Array.Clear(data, 0, data.Length);
ip = client.Receive(data).ToString();
if (ip != "")
{
MessageBox.Show("ip != 0");
break;
}
}
else
{
bytes = client.Receive(data); // client is the socket
if (bytes != 0) // bytes is an int
{
if (BitConverter.IsLittleEndian)
Array.Reverse(data);
port32 = Encoding.ASCII.GetString(data, 0, bytes);
MessageBox.Show($"port32 = {port32} data = {data} bytes = {bytes}"); // port32 is always blank
}
}
}
答案 6 :(得分:0)
如果您的字符串为ISO 8601格式,则也可以使用from_iso8601_timestamp
答案 7 :(得分:0)
date_format
要求第一个参数为timestamp
,因此不是转换字符串的最佳方法。请改用date_parse
。
此外,将%c
用于非零填充月份,将%e
用于非零填充月份,将%Y
用于四位数年份。
SELECT date_parse('7/22/2016 6:05:04 PM', '%c/%e/%Y %r')