Oracle中日期格式轉化之dd-M月-yyyy轉爲yyyyMMdd

Oracle中日期格式轉化之dd-M月-yyyy轉爲yyyyMMdd

問題:

項目中遇到某張表的日期字段來自郵件解析入庫,而表的日期字段又建的是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
	)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章