2016-10-05 71 views
5

我就急和格式化爲VARCHAR,看起來像一個日期 -普雷斯托SQL - 轉換日期字符串到日期格式

7/14/2015 8:22:39 AM 

我看過了似的文檔,並試圖各種事情(演員, 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

爲什麼'CAST'不工作?你是如何嘗試添加的? –

+0

@Prdp添加了示例語法 – Moosa

+0

我認爲問題與日期格式有關。你能改變這種'2016-03-31 6:05:04 PM'的格式嗎? –

回答

-1

嘗試:

SELECT convert(datetime, '7/14/2015 8:22:39 AM', 101) 

輸出:

2015年7月14日08:22:39.000

+0

看起來不像是在presto上工作。它說轉換功能沒有註冊。 – Moosa

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> 

中間有一些定義可以鏈接回這些數據庫,但簡而言之,需要使用可選.mmm毫秒的YYYY-MM-DD HH:MM:SS來處理所有SQL數據庫。

+0

是的,但它與AM/PM有關。如果我選擇'cast('2016-03-31 6:05:04 PM'作爲時間戳')'它不起作用。但如果我刪除am/pm並執行'select cast('2016-03-31 6:05:04'作爲時間戳)'那麼它就可以工作。但我需要上午/下午或轉換爲24小時。 – Moosa

+0

如果您堅持按照文檔使用非標準'3/31/2016 6:05:04 PM',格式爲'%c /%e /%y%r'。看看https://prestodb.io/docs/current/functions/datetime.html – coladict

+0

這就是我的數據是如何格式化的。我願意重新格式化,但不知道如何。這是我的問題。根據上面的評論,如果我做'date_format('7/22/2016 6:05:04 PM','%c /%e /%y%r')'這也給我一個錯誤 – Moosa

11

我想通了。下面的工作將其轉換爲24小時日期格式。

select date_parse('7/22/2016 6:05:04 PM','%m/%d/%Y %h:%i:%s %p')