写点什么

银行数据库迁移至 MySQL,竟被时间字段这玩意耍了……

  • 2021-05-28
  • 本文字数:1331 字

    阅读完需:约 4 分钟

银行数据库迁移至MySQL,竟被时间字段这玩意耍了……

背景介绍

笔者在工作中曾遇到 SyBase 数据库迁移至 MySQL 时的一个问题:使用 bcp 将 SyBase 中的数据导出为 csv 文件时,datetime 数据类型默认导出格式与 MySQL 不兼容。Sybase 默认的 datetime 类型格式为 Mmm dd yyyy hh:nn:ss:sssAA,示例如下:


Dec 24 2017 12:00:00:000PM
复制代码


而 MySQL 中 datetime 类型格式为 yyyy-mm-dd hh:nn:ss,示例如下:


2017-12-24 12:00:00
复制代码


因此直接将 csv 文件导入 MySQL 会由于不兼容导致报错。

解决方式

解决此问题的方式不外乎两种:一是修改导出后的 csv 文件,令其时间字段的数据格式兼容 MySQL;二是修改 SyBase 数据库中时间字段的数据格式,使其直接能通过 bcp 导出兼容 MySQL 的 csv 文件。鉴于第一种方法较为复杂,本文笔者采用第二种方法解决该问题。

1、convert()函数介绍

convert()函数是 SyBase 数据库中用于数据类型转换的函数,其使用方式如下:


convert(datatype,expression,[format-style])
复制代码


  • datatype:必选参数,将要转换成的数据类型;

  • expression:必选参数,待转换的字段;

  • format-style:可选参数,转换时间类型时,决定输出格式的参数,对应关系见下表:


format-style的值

输出格式

输出示例

100

Mmm dd yyyy hh:nnAA

Dec 24 2017 12:00PM

101

mm/dd/yyyy

12/24/2017

102

yyyy.mm.dd

2017.12.24

103

dd/mm/yyyy

24/12/2017

104

dd.mm.yyyy

24.12.2017

105

dd-mm-yyyy

24-12-2017

106

dd Mmm yyyy

24 Dec 2017

107

Mmm dd,yyyy

Dec 24,2017

108

hh:nn:ss

12:00:00

109

Mmm dd yyyy hh:nn:ss:sssAA

Dec 24 2017 12:00:00:000PM

110

mm-dd-yyyy

12-24-2017

111

yyyy/mm/dd

2017/12/24

112

yyyymmdd

20171224


例如有一个名为 test 的表,将该表中一个名为 changetime,类型为 datetime 的字段转换为 varchar 类型,可以使用如下 SQL 语句:



select convert(varchar(100),changetime,111) as dates from test;
复制代码


若该字段仅有一行数据,其值为 Dec 24 2017 12:00:00:000PM,那么以上 SQL 输出的结果为 2017/12/24.

2、str_replace()函数介绍

str_replace()参数用于替换字符串中的部分字符,其使用方式如下:


str_replace(‘string1’,’string2’,’string3’)
复制代码


参数含义:

  • string1:必选参数,原始字符串;

  • string2:必选参数,待转换的字符;

  • string3:必选参数,需要转换成的字符;


例如以下 SQL:


select str_replace(‘2017/12/24’,’/’,’-’);
复制代码


其输出结果为 2017-12-24.

3、具体方案实施

由以上示例可见,若将 SyBase 中 datetime 类型字段使用 convert()函数转换为 varchar 类型,format-style 的值指定为 111,再使用 str_replace()函数,将 convert()转换来的字符串中的’/’转换为’-’,即可满足 MySQL 中对 datetime 类型的格式要求(yyyy-mm-dd);同理,format-style 的值指定为 108,即可满足 hh:nn:ss 的格式要求。具体的实施方案举例说明如下:


1)在 SyBase 数据库建立一张临时表 tmp,表结构与待导出数据的表 test 一致,仅 datetime 类型字段改为 varchar 类型;表结构见以下 SQL 语句:


create table test(id int,time datetime);create table tmp(id int,time varchar(100));
复制代码


2)采用如下 SQL 语句将原始表的数据存入临时表中:


insert into tmp select id,str_replace(convert(varchar(100),time,111),'/','-')+' '+convert(varchar(100),time,108) from test;
复制代码


3)将临时表 tmp 中的数据使用 bcp 命令导出为 csv 文件;


4)将 csv 文件中的数据导入 MySQL 数据库对应表中。


至此,解决了 SyBase 中 datetime 类型字段默认导出格式与 MySQL 不兼容的问题。


作者介绍

农行研发中心“数风云”团队,一支朝气蓬勃、快速成长的技术团队,始终致力于农行大数据、数据库和云计算等领域的应用实践与技术创新,探索数据赋能,勇攀数据云巅,为企业数字化转型和金融科技发展不断贡献力量。


本文转载自:dbaplus 社群(ID:dbaplus)

原文链接:银行数据库迁移至MySQL,竟被时间字段这玩意耍了……

2021-05-28 08:001849

评论

发布
暂无评论
发现更多内容

培训班出来的前端和自学的优势

小谷哥

贾斯特里尼&布鲁克斯,优质葡萄酒都有甄选法则

联营汇聚

干货|3DMax优化模型的方法有哪些?

Finovy Cloud

云渲染 3DMAX

Iceberg 在袋鼠云的探索及实践

袋鼠云数栈

TDengine 时序数据库与一汽解放携手,助力商用车智能网联

TDengine

数据库 tdengine 时序数据库

区块链NFT商城系统开发技术

薇電13242772558

区块链

贾斯特里尼&布鲁克斯酿酒专家帮您区分干红葡萄酒和甜红葡萄酒

联营汇聚

华为云解锁云原生数据库发展新动能

华为云开发者联盟

数据库 后端 华为云 12 月 PK 榜

贾斯特里尼&布鲁克斯葡萄酒,佳节送礼首选

联营汇聚

带你玩转OpenHarmony AI:基于Seetaface2的人脸识别

OpenHarmony开发者

OpenHarmony openha

双币质押挖矿分红模式系统开发技术模式方案

I8O28578624

华为云桌面驱动数字内容变革,按下文娱社交行业升级加速键

爱尚科技

从源码层面深度剖析Spring循环依赖

京东科技开发者

spring 缓存 循环依赖 spring MV @Bean

大数据培训机构如何选择?

小谷哥

贾斯特里尼&布鲁克斯葡萄酒,提升用餐仪式感

联营汇聚

流量与技术双重加持,小游戏迎来高速增长周期

FinFish

小游戏 小程序游戏 小程序游戏开发 微信小游戏

易观千帆 | 2022年11月银行APP月活跃用户规模盘点

易观分析

App 手机银行 用户分析

一周刷爆LeetCode,字节技术官亲码算法与数据结构刷题宝典真香

Java永远的神

程序员 数据结构 算法 LeetCode 大厂面试

培训班学习完后就业前景怎么样

小谷哥

火山引擎DataTester为企业降本增效:1个人也能成为一支A/B实验团队

字节跳动数据平台

大数据 AB testing实战 12 月 PK 榜

边疆水土培养边疆人才,云南大学研究团队借助昇思MindSpore提出智慧医疗创新解决方案

Geek_2d6073

推荐8个提高工作效率的IntelliJ插件

风铃架构日知录

后端 开发 Java、 intellij java架构师

华为云桌面Workspace带你走进云上办公新时代

爱尚科技

华为云桌面能为设计行业提供哪些“黑科技”?

爱尚科技

8000字详解Thread Pool Executor

华为云开发者联盟

Java 开发 华为云 12 月 PK 榜

彪悍升级|尚硅谷Hive新版视频教程发布

小谷哥

云原生安全系列3:5个 Kubernetes API 网络安全访问最佳实践

HummerCloud

云原生 k8s 云原生安全 kubernetes 运维

揭秘百度智能测试在测试定位领域实践

百度Geek说

百度 测试定位 智能测试 12 月 PK 榜

大数据培训班应该如何学习?

小谷哥

【PCB设计】孔间距不可忽视,小心废板!

华秋PCB

工具 PCB PCB设计

消息中间件执行原理

C++后台开发

分布式 中间件 消息队列 后端开发 linux开发

银行数据库迁移至MySQL,竟被时间字段这玩意耍了……_数据库_dbaplus社群_InfoQ精选文章