データの信頼性が低いのが敗因ですが、FUNCTIONを使っては?
PL/SQL
1CREATE OR REPLACE FUNCTION STRING_TO_DATE
2 (
3 IN_STRING IN VARCHAR2
4 )
5 RETURN DATE
6IS
7BEGIN
8 RETURN(TO_DATE(IN_STRING, 'YYYY/MM/DD HH24:MI')) ;
9EXCEPTION
10 WHEN OTHERS THEN
11 BEGIN
12 RETURN(TO_DATE(IN_STRING, 'YYYY/MM/D HH24:MI')) ;
13 EXCEPTION
14 WHEN OTHERS THEN
15 BEGIN
16 RETURN(TO_DATE(IN_STRING, 'YYYY/M/DD HH24:MI')) ;
17 EXCEPTION
18 WHEN OTHERS THEN
19 BEGIN
20 RETURN(TO_DATE(IN_STRING, 'YYYY/M/D HH24:MI')) ;
21 EXCEPTION
22 WHEN OTHERS THEN
23 -- cannot convert date
24 RETURN(NULL) ;
25 -- RAISE ;
26 END ;
27 END ;
28 END ;
29END STRING_TO_DATE ;
30/
-- 使用例
SQL
1ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS' ;
2WITH DATE_LIST AS
3 (
4 SELECT '2018/1/1 15:00' AS DATA_DATE FROM DUAL UNION ALL
5 SELECT '2017/11/1 15:00' FROM DUAL UNION ALL
6 SELECT '2017/11/11 15:00' FROM DUAL UNION ALL
7 SELECT '2017/1/10 15:00' FROM DUAL
8 )
9SELECT
10 DL.DATA_DATE
11 , STRING_TO_DATE(DL.DATA_DATE)
12FROM DATE_LIST DL
13WHERE
14 DL.DATA_DATE != '-';
15
16-- 結果
17DATA_DATE STRING_TO_DATE(DL.D
18-------------------------------- -------------------
192018/1/1 15:00 2018/01/01 15:00:00
202017/11/1 15:00 2017/11/01 15:00:00
212017/11/11 15:00 2017/11/11 15:00:00
222017/1/10 15:00 2017/01/10 15:00:00
23
244行が選択されました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。