我在表中有以下日期/時間,我需要轉換并選擇少于 30 天的任何內容。
我在表中有兩列:名稱,時間戳
時間戳采用以下格式:2022-02-08T22:19:12:200
這是我到目前為止嘗試的查詢,只是為了選擇日期并將其轉換為不同的格式,但得到oral-01843:not a valid month
從 mytable 中選擇名稱,to_date(timestamp, 'MM/DD/YYYY');
uj5u.com熱心網友回復:
假設您的timestamp列是一種TIMESTAMP資料型別,那么您不需要將該列轉換為不同的格式(首先,因為 aTIMESTAMP是一種二進制資料型別,由 7-13 個位元組組成,代表世紀的 7 個位元組,年份-世紀、月、日、小時、分鐘和秒,然后是小數秒的 6 個可選位元組,并且不以任何人類可讀的格式存盤;其次,因為不需要轉換,因為您可以不進行轉換)。
要查找不到 30 天的行,您可以使用:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= SYSTIMESTAMP - INTERVAL '30' DAY;
如果你想忽略時間組件,那么你可以使用:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= TRUNC(SYSDATE) - INTERVAL '30' DAY;
如果您想以某種格式顯示時間戳列(而不是比較兩個日期/時間),那么您可以使用TO_CHAR:
SELECT name,
TO_CHAR(timestamp, 'MM/DD/YYYY') AS formatted_timestamp
FROM table_name
如果您的列是VARCHAR2資料型別并且您以 ISO8601 格式存盤字串,那么您可以使用:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= TO_CHAR(SYSTIMESTAMP - INTERVAL '30' DAY, 'YYYY-MM-DD"T"HH24:MI:SS.FF');
或者,如果您想忽略時間組件,則只需從格式模型中洗掉時間組件TO_CHAR:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= TO_CHAR(SYSTIMESTAMP - INTERVAL '30' DAY, 'YYYY-MM-DD');
如果您想以不同的格式顯示您的字串,請將其轉換為時間戳,然后再轉換回字串:
SELECT name,
TO_CHAR(
TO_TIMESTAMP(timestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF'),
'MM/DD/YYYY'
) AS formatted_date
FROM table_name
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461749.html
