不帶where-clause的輸出:
| ID | NAMEN | 名字BEGINNENDE | 108129 | Kürbis, Gartenkürbis, Feldkürbis | 。Blüten | 126611 |
|---|---|---|
| Nussbaum, Walnuss, Christnuss | Nussbaum, Walnuss, Christnuss | 。Schalen | 8月
嗨,我試圖選擇beginn(例如Juli)和ende(例如Dezember)之間的條目(varchar2)。
select * from (
select * from VIEW_USER_CON_PFLANZE_ERNTE
)
where sysdate
between to_date(begin, 'MONTH'/span>, 'NLS_DATE_LANGUAGE=German')
and to_date( ende, 'MONTH', 'NLS_DATE_LANGUAGE=German')
但我得到的錯誤。ORA-01843: 不是一個有效的月份
。最后,我想實作:
。
where sysdate
...
and last_day(to_date( ende, 'DD.Month', 'NLS_DATE_LANG=German')
選擇to_date(begin, 'MONTH', 'NLS_DATE_LANGUAGE=German')*和*to_date( ende, 'MONTH', 'NLS_DATE_LANGUAGE=German')從dual作業,我得到MM/DD/YYYY的兩個日期
uj5u.com熱心網友回復:
很可能在你的表中有無效的月份名稱。另一個證明就是你應該永遠不要將日期/時間值存盤為字串。總是使用適當的DATE/TIMESTAMP資料型別。
如果你使用Oracle 18或更新的版本,那么你可以發現像這樣的無效值:
SELECT *
FROM VIEW_USER_CON_PFLANZE_ERNTE
WHERE
TO_DATE(beginn DEFAULT NULL ON CONVERSION ERROR。'MONTH', 'NLS_DATE_LANGUAGE=German') ISNULL
或
TO_DATE(努力 DEFAULT NULL ON CONVERSION ERROR, 'MONTH', 'NLS_DATE_LANGUAGE=German') ISNULL
或者這個:
WITH t AS (
SELECT beginn, ende,
VALIDATE_CONVERSION(beginn AS DATE, 'MONTH', 'NLS_DATE_LANGUAGE=German') as begin_valid,
VALIDATE_CONVERSION(努力 AS DATE, 'Month', 'NLS_DATE_LANGUAGE=German') as end_valid
FROM VIEW_USER_CON_PFLANZE_ERNTE)
SELECT *
FROM t
WHERE begin_valid= 0 or end_valid = 0
uj5u.com熱心網友回復:
另一個選擇。
建議。將date欄位存盤為varchar2確實是一種不好的做法。我見過很多次,我認為這是因為人們害怕處理date資料型別
這只是一個有選項的例子(這里有很多可能性)。如果沒有你的資料模型的樣本資料,真的不可能確定你到底是在哪里出的錯。
SQL> 創建 表 t1 ( c1 varchar2(30) , c2 varchar2(30) ) 。
Table創建。
SQL> insert into t1 values ( '01/01/2021' , '23/08/2021' ) 。
1 row 創建。
SQL> commit 。
Commit完成。
SQL> select to_date(c1,'dd/mm/yyyy') as c1 , to_date(c2,'dd/mm/yyyy') as c2 from t1 。
C1 C2
--------- ---------
01-JAN-21 23-AUG-21SQL> select to_char(cast(to_date(c1, 'dd/mm/yyyy') as date) , 'MONTH'/span> , 'NLS_DATE_LANGUAGE=German'/span> ) ,
2 to_char(cast(to_date(c2,'dd/mm/yyyy') as date) , 'MONTH' , 'NLS_DATE_LANGUAGE=German' )
3 from t1 ;
TO_CHAR(CAST(TO_DATE(C1,'DD/MM/YYYY') TO_CHAR(CAST(TO_DATE(C2,'DD/MM/YYYY')
------------------------------------ ------------------------------------
1月 8月
使用extract
SQL> select extract(month from (cast(to_date(c1, 'dd/mm/yyyy') as date)) from t1 ;
EXTRACT(MONTHFROM(CAST(TO_DATE(C1,'DD/MM/YYYY')ASDATE))
--------------------------------------------------------
1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/328383.html
標籤:
下一篇:SQL將兩行合并為一行
