[英]SQL Error 2207 on TO_TIMESTAMP() using datetime format
在Postgres中,我試圖在WHERE謂詞中進行基於日期/時間的查詢。
當我嘗試選擇此日期/時間格式時,SQL錯誤提示該值必須為整數。 我不確定為什么不認為我的17分鍾不是整數,或者為什么只將其視為1而不是17?
SELECT *
FROM history
WHERE create_time > TO_TIMESTAMP('2018-10-08T23:17:44.728','yyyy-MM-dd''T''HH:mm:ss.SSS');
錯誤:“ HH”的值“:1”無效詳情:值必須為整數。 SQL狀態:22007
問題是由於在HH
之前使用了''T''
,並且DB發出信號,您可能會使用
TO_TIMESTAMP('2018-10-08 23:17:44.728','yyyy-mm-dd HH24:MI:SS.MS')
代替。
您正在嘗試使用包含T的日期值,並且似乎在嘗試向TO_TIMESTAMP聲明T是要忽略的文字值。 問題是您通過放置'T'
(撇號-T-撇號,轉義)來執行此操作,這使解析器增加了3個字符,然后在期望HH時從23:17遇到“:1”:
--your date, and underneath it, the format you gave
2018-10-08T23:17:44.728
yyyy-MM-dd'T'HH:mm:ss.SSS
您能看到HH與(1)垂直對齊嗎? Postgres抱怨它期望可以解析為23的整數,但是遇到了字符串:1,它不是整數。
這個問題:
Postgres-具有to_timestamp()忽略/不讀取日期/時間字符串中間的特定字符
意味着您可以在T所在的格式中放置一個空格,或者只是將您需要的字符串轉換為時間戳記-postgres顯然可以將該字符串解析為時間戳記,而不必為它明確地實際設置格式
嘗試:
SELECT *
FROM history
WHERE create_time > TIMESTAMP '2018-10-08T23:17:44.728'
SELECT *
FROM history
WHERE create_time > cast('2018-10-08T23:17:44.728' as timestamp)
SELECT *
FROM history
WHERE create_time > TO_TIMESTAMP('2018-10-08T23:17:44.728','yyyy-MM-dd HH:mm:ss.SSS');
您甚至可能會發現這可行:
SELECT *
FROM history
WHERE create_time > TO_TIMESTAMP('2018-10-08T23:17:44.728', 'yyyy MM dd HH mm ss SSS')
數字與格式字段對齊,空格用於其他所有您要忽略的內容(連字符,冒號,點等)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.