网站首页 > 技术文章 正文
今天遇到一个需求,表中有一个字段,字段存储的值是 “24年3月6日版本V1” , “24年2月22是版本V1”, “ABC-0222-V1”,“上传于23年2月22日版本V1”;现在要将这种以24年开头的日期提取出来并转换成正常的日期格式如:YYYY-MM-DD 的格式;本想着一个个截取然后在将截取后的值进行拼接,但是一想需要截取的值实在是太多了,果断放弃,选择了更好的方法采用正则表达式来实现;
下面就通过代码来实现一下Oracle(19c)和PostgreSQL中如何将这种数据提取并转换;
1.创建一个测试数据表
Oracle数据库版本:
1.1.Oracle建表
-- 删除数据表 --
DROP TABLE TEST ;
-- 创建数据表 --
CREATE TABLE TEST(
COL_NAME VARCHAR(50)
);
1.2.插入数据
-- 插入数据 --
INSERT INTO TEST VALUES('24年3月6日版本V1');
INSERT INTO TEST VALUES('24年2月22日版本V1');
INSERT INTO TEST VALUES('ABC-0222-V1');
INSERT INTO TEST VALUES('上传于23年2月22日版本V1');
1.3.查询数据
SELECT * FROM TEST T ;
1.4.日期提取
SELECT COALESCE(TO_CHAR(TO_DATE(T1.NEW_NAME, 'YY"年"MM"月"DD"日"'),
'YYYY-MM-DD'),
OLD_NAME) AS COL_NAME
FROM (SELECT CASE
-- 判断是否是数字开头 --
WHEN REGEXP_LIKE(T.COL_NAME1, '^[0-9]') THEN
T.COL_NAME1
END NEW_NAME
,CASE
-- 判断非数字开头 --
WHEN REGEXP_LIKE(T.COL_NAME1, '^[^0-9]') THEN
T.COL_NAME1
END OLD_NAME
FROM (SELECT SUBSTR(COL_NAME, 1, INSTR(COL_NAME, 'V') - 2) COL_NAME1
FROM TEST) T) T1
注意:
在Oracle11G上测试 TO_DATE(‘24年3月6日’ , ‘YY"年"MM"月"DD"日"’) 这种语法直接报错,想使用这个功能的小伙伴,建议升级一下数据库;
2.PostgreSQL建表
这里的数据跟Oracle中的数据是一样的,所以这里就不贴图了
2.1.建表
-- 删除数据表 --
DROP TABLE TEST ;
-- 创建数据表 --
CREATE TABLE TEST(
COL_NAME VARCHAR(50)
);
2.2.插入数据
-- 插入数据 --
INSERT INTO TEST VALUES('24年3月6日版本V1');
INSERT INTO TEST VALUES('24年2月22日版本V1');
INSERT INTO TEST VALUES('ABC-0222-V1');
INSERT INTO TEST VALUES('上传于23年2月22日版本V1');
2.3.查询数据
SELECT * FROM TEST T ;
2.4.日期提取
SELECT COALESCE(TO_CHAR(TO_DATE(T1.NEW_NAME, 'YY"年"MM"月"DD"日"'),
'YYYY-MM-DD'),
OLD_NAME) AS COL_NAME
FROM (SELECT CASE
-- 判断是否是数字开头 --
WHEN T.COL_NAME1 '^[0-9]' THEN
T.COL_NAME1
END NEW_NAME
,CASE
-- 判断非数字开头 --
WHEN T.COL_NAME1 '^[^0-9]' THEN
T.COL_NAME1
END OLD_NAME
FROM (SELECT SUBSTR(COL_NAME, 1, INSTR(COL_NAME, 'V') - 2) COL_NAME1
FROM TEST) T) T1;
猜你喜欢
- 2024-11-03 《MySQL 入门教程》第15篇MySQL常用函数之字符函数
- 2024-11-03 分享一个有意思的渗透测试工具——sqlmap
- 2024-11-03 黑客最喜欢的脚本之一Perl,让你拥有无限可能
- 2024-11-03 「NLP2005年以来大突破」语义角色标记深度模型,准确率提升10%
- 2024-11-03 自生成数据实现LLM自我纠正,DeepMind新突破:纠正性能提升15.9%
- 2024-11-03 超越99.9%人类玩家,微软专业十段麻将AI论文细节首次公布
- 2024-11-03 如何避免出现 SQL 注入漏洞 如何避免 sql 注入?
- 2024-11-03 Linux命令-nl命令 linux命令nano
- 2024-11-03 Grails指南22查询基础 grails中文参考手册
- 2024-11-03 举个例子,说说用SQL怎么处理文本数据
你 发表评论:
欢迎- 623℃几个Oracle空值处理函数 oracle处理null值的函数
- 615℃Oracle分析函数之Lag和Lead()使用
- 603℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 599℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 595℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 588℃【数据统计分析】详解Oracle分组函数之CUBE
- 576℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 564℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)