select * from (select * from A29 WHERE 1 = 1 AND EXISTS
(SELECT 1 FROM A02 x WHERE x.a0000 = A29.A0000
AND x.a0201b LIKE '001.001.003%' and EXISTS (select 1 from a01 a01 where a01.A0000 = x.A0000 and a01.A0163 = '1') )
) A29
where 1=1 and (A29.A2949 is not null and A29.A2947 is not null and (CASE
When Nvl(Length(A29.A2949), 0) = 8 Then
To_Date(A29.A2949, 'yyyyMMdd')
When Nvl(Length(A29.A2949), 0) = 6 Then
To_Date(A29.A2949, 'yyyyMM')
When Nvl(Length(A29.A2949), 0) = 4 Then
To_Date(concat(A29.A2949, '01'), 'yyyyMM')
Else
Null
END) < (CASE
When Nvl(Length(A29.A2947), 0) = 8 Then
To_Date(A29.A2947, 'yyyyMMdd')
When Nvl(Length(A29.A2947), 0) = 6 Then
To_Date(A29.A2947, 'yyyyMM')
When Nvl(Length(A29.A2947), 0) = 4 Then
To_Date(concat(A29.A2947, '01'), 'yyyyMM')
Else
Null
END))
原本的sql就是上面這條,,A29表中一共有兩條記錄,其中一條記錄的A2949欄位格式是正確的,另外一條是錯誤的, 根據標紅的這段sql執行后會查出格式正確的那一條記錄,再以查詢的這一條記錄作為查詢表時,還是報了無效的月份,where條件里的 To_Date函式還是走了A29的全部A2949欄位 ,求助改怎么寫才能過濾掉錯誤欄位 ,使正確的那一條記錄兩個欄位進行比較
uj5u.com熱心網友回復:
抱歉,太啰嗦了,如CASE
When Nvl(Length(A29.A2947), 0) = 8 Then
To_Date(A29.A2947, 'yyyyMMdd')
When Nvl(Length(A29.A2947), 0) = 6 Then
To_Date(A29.A2947, 'yyyyMM')
When Nvl(Length(A29.A2947), 0) = 4 Then
To_Date(concat(A29.A2947, '01'), 'yyyyMM')
Else
Null
END
只需一個函式即可替代:rpad(A29.A2947,8,'0101')
uj5u.com熱心網友回復:
to_date(rpad(A29.A2947,8,'0101'),'yyyymmdd')uj5u.com熱心網友回復:
使用rpad函式執行sql還是會報無效的月份,問題在于如何避開錯誤格式的資料,如果避開了估計用哪個都是可以走的通的(不過我這個確實啰嗦了一點
)uj5u.com熱心網友回復:
既然是無效的月份,那就對月份進行判斷:to_date(case when substr(rpad(A29.A2947,8,'0101'),5,2) between '01' and '12' then rpad(A29.A2947,8,'0101')
else substr(rpad(A29.A2947,8,'0101'),1,4)||'0101' end,'yyyymmdd')
uj5u.com熱心網友回復:
您這段sql判斷了如果格式是正確的直接轉換日期對比,如果格式不正確就轉換成正確格式再進行對比,無論資料正確與否都起到了轉換的作用.而現在我要做的是 : 本來的A29的兩條資料,根據過濾后取到一條資料,如果這條資料能直接轉換的話直接轉換,不能直接轉換的還是需要拋錯的,而不是直接轉換掉,然后現在過濾后這一條資料是可以直接轉換的,但是過濾前的那條資料是錯誤不能轉換的,但是不在本次sql需要執行的對比范圍之內,但sql還是做了轉換并拋了無效的月份
uj5u.com熱心網友回復:
標紅的SQL真的能過濾出正確格式的嗎重命名的A29和表名A29會不會有影響
uj5u.com熱心網友回復:
用紅色的這段sql單獨執行查出來過了,是正確格式的.
重命名的A29我改成另外的別名也是一樣會報錯,所以我就又改回來了.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/87759.html
標籤:開發
