問題:
項目中遇到某張表的日期字段來自郵件解析入庫,而表的日期字段又建的是nvarchar2類型,遂查詢出的日期字段全是dd-M月-yyyy格式,對日期排序等操作非常不友好,需要轉換乘yyyyMMdd
解決辦法
後半段借鑑網友出的同樣問題,月份數字是動態的,需要case when判斷轉化。
SELECT
CASE
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%一%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'01'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%二%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'02'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%三%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'03'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%四%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'04'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%五%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'05'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%六%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'06'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%七%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'07'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%八%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'08'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%九%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'09'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%十%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'10'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%十一%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'11'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
WHEN SUBSTR (LAYDAYS_COMMENCING, 7, 2) LIKE '%十二%' THEN
CONCAT (
CONCAT (
SUBSTR (LAYDAYS_COMMENCING, 0, 4),
'12'
),
SUBSTR (LAYDAYS_COMMENCING, 9, 2)
)
END AS LAYDAYS_COMMENCING
FROM
(
SELECT
'20' || SUBSTR (
T .LAYDAYS_COMMENCING,
INSTR (
T .LAYDAYS_COMMENCING,
'-',
1,
2
) + 1,
2
) || '-' || DECODE (
LENGTH (
SUBSTR (
T .LAYDAYS_COMMENCING,
INSTR (
T .LAYDAYS_COMMENCING,
'-',
1,
1
) + 1,
LENGTH (
SUBSTR (
T .LAYDAYS_COMMENCING,
INSTR (
T .LAYDAYS_COMMENCING,
'-',
1,
1
) + 1
)
) - LENGTH (
SUBSTR (
T .LAYDAYS_COMMENCING,
INSTR (
T .LAYDAYS_COMMENCING,
'月',
1,
1
)
)
)
)
),
1,
'0'
) || SUBSTR (
T .LAYDAYS_COMMENCING,
INSTR (
T .LAYDAYS_COMMENCING,
'-',
1,
1
) + 1,
LENGTH (
SUBSTR (
T .LAYDAYS_COMMENCING,
INSTR (
T .LAYDAYS_COMMENCING,
'-',
1,
1
) + 1
)
) - LENGTH (
SUBSTR (
T .LAYDAYS_COMMENCING,
INSTR (
T .LAYDAYS_COMMENCING,
'月',
1,
1
)
)
)
) || '-' || SUBSTR (T .LAYDAYS_COMMENCING, 1, 2) AS LAYDAYS_COMMENCING
FROM
SHIPING T
)