使⽤sql语句将⼀张旧表中的数据取出并插⼊到另⼀张新表中(字段不对应),
并将中⽂name转。。。
要求:将公司旧项⽬中⼀个表的数据取出,全部放⼊到新项⽬的表中,两张表的字段是不对应的,数据有3446条,⼀条⼀条改,效率太低,所有这⾥采⽤的是sql语句进⾏操作
参考语法链接:
具体例⼦(⾏政区域)
旧表格式:图中箭头指的是新表中需要的数据
旧表中的字段:
INSERT INTO`ctp_enum_item2`(
`ID`,//对应新表的id
`REF_ENUMID`,
`SHOWVALUE`,//对应新表的name
`ENUMVALUE`,
sql语句替换表中内容
`SORTNUMBER`,//对应新表的order_no
`STATE`,
`OUTPUT_SWITCH`,
`ORG_ACCOUNT_ID`,
`PARENT_ID`,
`ROOT_ID`,
`LEVEL_NUM`,//对应新表的level
`DESCRIPTION`,
`IFUSE`,
`I18N`,
`EXT1`,
`CODE`
)
VALUES
(-9223319470413034858,8264671846789452738,'⼴饶县','4',5,1,1,NULL,4923038349001772427
-,0,2,NULL,'N',1,NULL,NULL);
新表中的字段:
INSERT INTO`ctp_enum_item`(
`id`,
`tenant_id`,
`create_time`,
`update_time`,
`version`,
`code`,
`name`,
`description`,
`level`,
`leaf`,
`enable`,
`start_time`,
`end_time`,
`editable`,
`child_changeable`,
`preset`,
`enum_id`,
`parent_id`,
`obs_id`,
`order_no`,
`logic_app_id`
)
那么怎么将旧表中我需要的数据取出来呢?
a.id,-1,
'2021-05-12 08:00:00',// 对应新表中的创建时间 —— 所有列都⼀样,这⾥直接写死
'2021-05-12 08:00:00',// 对应新表中的更新时间 —— 所有列都⼀样,这⾥直接写死
0,
to_pinyin ( a.SHOWVALUE ),//对应新表中的code,使⽤to_pinyin()函数将name汉字转为拼⾳ a.SHOWVALUE,//汉字,对应name
'',
a.LEVEL_NUM +1,//对应新表中的level(层级)
1,
1,
'1970-01-01 08:00:00',
'9999-12-31 23:59:59',
0,
1,
1,
502537762793718700,//枚举值
PARENT_ID,//⽗id 如海淀区的parentId为北京市的id
NULL,
SORTNUMBER,
NULL
FROM
ctp_enum_item2 AS a
查询出的结果展⽰
插⼊到新表的操作——sql语句
INSERT INTO`ctp_enum_item`( `id`,
`tenant_id`,
`create_time`,
`update_time`,
`version`,//新表的各列
`code`,
`name`,
`description`,
`level`,
`leaf`,
`enable`,
`start_time`,
`end_time`,
`editable`,
`child_changeable`,
`preset`,
`enum_id`,
`parent_id`,
`obs_id`,
`order_no`,
`logic_app_id`
)SELECT
a.id,-1,
'2021-05-12 08:00:00',
'2021-05-12 08:00:00',
0,
to_pinyin ( a.SHOWVALUE ),
a.SHOWVALUE,
NULL,
a.LEVEL_NUM +1,
1,
1,
'1970-01-01 08:00:00',
'9999-12-31 23:59:59',
0,
1,
1, 502537762793718700,
PARENT_ID,
NULL,
SORTNUMBER,
NULL
FROM
ctp_enum_item2 AS a
插⼊到新表的数据展⽰
⾄此,旧表数据全部插⼊到新表中了
另⼀个问题是,name汉字名称转化为拼⾳的过程
创建拼⾳对照表
-- 创建汉字拼⾳对照临时表
CREATE TABLE IF NOT EXISTS`t_base_pinyin`(
`pin_yin_`varchar(255)CHARACTER SET gbk NOT NULL, `code_`int(11)NOT NULL,
PRIMARY KEY(`code_`)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;
插⼊对照数据

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。