Presto SQL - 将日期字符串转换为日期格式

时间:2016-10-05 17:44:37

标签: sql presto

我在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'

如何转换此内容?

8 个答案:

答案 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')