我必須運行開始時間在 00.00 AM 和 05.00 AM 之間的報告,但開始時間欄位是 varchar 欄位并且它有“20211110200336”
我正在嘗試
WHERE TO_CHAR(TO_DATE(開始時間,'YYYY-MM-DD HH24:MI:SS'),'HH24:MI:SS')在 '000000' 和 '050000' 之間
但我收到錯誤為“ORA-01840:輸入值對于日期格式 01840 不夠長。00000 - “輸入值對于日期格式不夠長”*原因:“
誰能幫我如何使用它
uj5u.com熱心網友回復:
您決定將DATE列存盤為VARCHAR2格式(不推薦)。
為什么?您不能使用DATE資料型別提供的功能,而必須使用自己的實作。
要從您的列中獲取時間部分(即HH24MISS),請使用substr
select substr('20211110200336',9,6) hh from dual;
HH
------
200336
所以謂詞是
WHERE substr(starttime,9,6) BETWEEN '000000' AND '050000'
您可以首先將列轉換為DATE型別
to_date('20211110200336','yyyymmddhh24miss')
但是你應該問問自己,為什么你在資料庫設計中沒有這個選擇(??!) ......
無論如何要獲得時間部分 - 使用to_char
select to_char(to_date('20211110200336','yyyymmddhh24miss'),'HH24MISS') hh from dual;
HH
------
200336
uj5u.com熱心網友回復:
您可以將其全部作為字串進行:
SELECT *
FROM table_name
WHERE SUBSTR(starttime, 9) BETWEEN '000000' AND '050000'
uj5u.com熱心網友回復:
您可以使用子字串,以便 oracle 將其轉換并視為數字
create table mytime(tm varchar2(14))
INSERT INTO mytime VALUES ('20211110200336')
1 rows affected
INSERT INTO mytime VALUES ('20211110040336')
1 rows affected
SELECT tm FROM mytime WHERE substr(tm,-6) BETWEEN 0 AND 50000
| TM值 |
|---|
| 20211110040336 |
小提琴
當然,如果您想在小時分鐘和秒內使用刺痛,您也可以進行演員表
create table mytime(tm varchar2(14))
INSERT INTO mytime VALUES ('20211110200336')
1 rows affected
INSERT INTO mytime VALUES ('20211110040336')
1 rows affected
SELECT tm FROM mytime WHERE substr(tm,-6) BETWEEN CAST('000000' as INTEGER) AND CAST('050000' as INTEGER)
| TM值 |
|---|
| 20211110040336 |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532682.html
