MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)_mysql脚本转postgressql

总结

总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。

如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

SELECT LENGTH( ‘PostgreSQL12数据库’ )

– 字符串小写与大写
– postgresql,POSTGRESQL
SELECT LOWER( ‘PostgreSQL’ ),UPPER( ‘PostgreSQL’ )

– 字符串出现的位置(下标从1开始)
– 8
SELECT POSITION( ‘S’ IN ‘PostgreSQL’ );

– 获取子字符串(下标从1开始)
– SQL
SELECT SUBSTRING( ‘PostgreSQL’ FROM 8 FOR 3 );

– 删除字符串的指定字符
– PostgreSQL
SELECT TRIM( BOTH ‘s’ FROM ‘sPostgreSQLss’ );

– 删除字符两端空格
– PostgreSQL
SELECT TRIM( ’ PostgreSQL ’ )

– 替换指定位置的字符
– PostgreSQL
SELECT OVERLAY( ‘PxxxgreSQL’ PLACING ‘ost’ FROM 2 FOR 3 );

– 替换所有子字符为另一个字符
– PostgreSQL
SELECT REPLACE( ‘PostgresQL’, ‘sQ’, ‘SQ’ );

– 根据分隔字符返回第x个字符串
– PostgreSQL
SELECT SPLIT_PART( ‘MySQL|PostgreSQL|Greenplum’, ‘|’, 2 );

– 分组拼接字符串 类似与 group_concat
STRING_AGG(fields, ‘,’ )
STRING_AGG(fields, ‘,’ ORDER BY fields)


#### 2.2 日期函数




| 函数 | 说明 | 返回类型 |
| --- | --- | --- |
| current\_date | 当前日期 | date |
| current\_time | 当前时间 | time with time zone |
| current\_timestamp、now() | 当前时间戳 | timestamp with time zone |
| date\_part(text, timestamp) | 获取子域(等效于extract) | double precision |
| extract(unit from date) | 获取子域 | double precision |
| date\_trunc(text, timestamp) | 截取指定的精度 | timestamp |


部分实例:



– 获取当前的日期、时间、时间戳
– 2022-10-19,15:22:38.890969+08,2022-10-19 15:22:38.890969+08,2022-10-19 15:22:38.890969+08
SELECT CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,now()

– 获取子域 year,month,day,hour,minute,second
– 2022
SELECT date_part(‘year’,TIMESTAMP’2022-10-19 11:07:30’)
– 10
SELECT extract(‘month’ FROM now())

– 截取指定的精度
– now() 2022-10-19 16:43:17.895054+08
– 2022-10-19 00:00:00+08
SELECT date_trunc(‘day’, now());
– 2022-10-19 16:00:00+08
SELECT date_trunc(‘hour’, now());


其他实例:



– 日期加减 year,month,day,hour,minute,second
– 2022-10-19 13:51:00.409176+08 --> 2022-11-18 13:51:00.409176+08
SELECT now( ) + INTERVAL ‘1 month’ - INTERVAL ‘1 day’

– 字符串转时间戳
– 2022-10-19 16:53:12+08
SELECT to_timestamp( ‘2022-10-19 16:53:12’, ‘YYYY-MM-DD hh24:mi:ss’ )

– 日期转字符串
– 2022-10-19 16:52:28
SELECT to_char ( now( ), ‘YYYY-MM-DD hh24:mi:ss’ )
– 2018-12-06
SELECT to_char ( CAST (‘’|| 20181206 AS TIMESTAMP ), ‘YYYY-MM-DD’ )

– 空值函数(默认值的类型要跟字段的值类型一致)
SELECT COALESCE( fieldsName, fieldsDefaultValue)


#### 2.3 其他函数



– 根据分组将字段值放入array并获取排序后的值
SELECT ( ARRAY_AGG ( fields order by fieldsName desc ) ) [ 1 ] FROM table


### 3.主要修改


#### 3.1字段别名



– 字段别名(需要添加双引号 否则会变小写)
SELECT fields_name AS “fieldsName” FROM table_name


#### 3.2 concat



– MySQL
concat(‘%’, #{keyword}, ‘%’)
– PostgreSQL
‘%’ || #{keyword} || ‘%’


### 4.替换语句


数据库需要安装以下扩展:



– 用于uuid函数
CREATE extension “uuid-ossp”;


以下使用bat脚本进行全量替换:




| 原始值 | 替换值 |
| --- | --- |
| STR\_TO\_DATE | TO\_TIMESTAMP |
| str\_to\_date | to\_timestamp |
| %Y-%m-%d %H:%i:%s | YYYY-MM-DD hh24:mi:ss |
| %Y-%m-%d | YYYY-MM-DD |
| %H:%i:%s | hh24:mi:ss |
| %Y-%m | YYYY-MM |
| date\_format | to\_char |
| sysdate() | to\_timestamp ( ‘’ || now( ), ‘YYYY-MM-DD hh24:mi:ss’ ) |
| uuid() | uuid\_generate\_v4() |
| IFNULL | COALESCE |
| ifnull | coalesce |


### 5.脚本分享


#### 5.1 脚本内容



@echo off
setlocal EnableDelayedExpansion

:: (1)替换 STR_TO_DATE 函数为 TO_TIMESTAMP
set “strOld1=STR_TO_DATE”
set “strNew1=TO_TIMESTAMP”
echo (1)Replac: STR_TO_DATE TO TO_TIMESTAMP

:: (2)替换 str_to_date 函数为 to_timestamp
set “strOld2=str_to_date”
set “strNew2=to_timestamp”
echo (2)Replac: str_to_date TO to_timestamp
for /f %%i in (‘dir /b /s /a:-d *.xml’) do (
pwsh -Command "(gc %%i) -replace ‘%strOld1%’, ‘%strNew1%’ -replace ‘%strOld2%’, ‘%strNew2%’ | Out-File %%i -Encoding utf8 "
)

:: (3)替换日期格式 %Y-%m-%d %H:%i:%s 为 YYYY-MM-DD hh24:mi:ss
set “strOld1=%%Y-%%m-%%d %%H:%%i:%%s”
set “strNew1=YYYY-MM-DD hh24:mi:ss”
echo (3)Replac: %%Y-%%m-%%d %%H:%%i:%%s TO YYYY-MM-DD hh24:mi:ss

:: (4)替换日期格式 %Y-%m-%d 为 YYYY-MM-DD
set “strOld2=%%Y-%%m-%%d”
set “strNew2=YYYY-MM-DD”
echo (4)Replac: %%Y-%%m-%%d TO YYYY-MM-DD

:: (5)替换日期格式 %H:%i:%s 为 hh24:mi:ss
set “strOld3=%%H:%%i:%%s”
set “strNew3=hh24:mi:ss”
echo (5)Replac: %%H:%%i:%%s TO hh24:mi:ss

最后我们该如何学习?

1、看视频进行系统学习

这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

2、读源码,看实战笔记,学习大神思路

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

Spring源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Mybatis 3源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Redis学习笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Spring Boot核心技术-笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

3、面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值