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
	)

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值