簡體   English   中英

使用日期時間格式的TO_TIMESTAMP()上的SQL錯誤2207

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM