pgsql 和 mysql语法对比

发布时间 2023-11-22 19:19:26作者: 梦幻&浮云%

超全mysql转换postgresql数据库方案

https://blog.csdn.net/weixin_42303757/article/details/128896250?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-128896250-blog-131395729.235%5Ev38%5Epc_relevant_anti_t3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-128896250-blog-131395729.235%5Ev38%5Epc_relevant_anti_t3&utm_relevant_index=5


1、!= 改为 <> (代码中,需要用cdata包起来 <![CDATA[<>]]> )
2、查询字段的别名要用双引号包起来 "
3、分页语句例:limit 0,10 改成 limit 10 offset 0
4、mysql关键字转义符去掉 
5、ifNull(字段名, 空值默认) 改成 COALESCE(字段名, 空值默认)
6、if()函数改用case when
7、locate(a, b) 改成 position(a in b)
8、convert(a using gbk) 改成 CAST(a AS text)
  现有:Convert(1000000+RowId,char)) 改 CAST(1000000+RowId AS text)
  (

  1、可以使用 CAST 函数或操作符
    SELECT CAST('123' AS integer); -- 将字符串 '123' 转换为整数
    SELECT CAST(12.34 AS text); -- 将浮点数 12.34 转换为文本
  2、你还可以使用操作符 :: 来实现类型转换
    SELECT '123'::integer; -- 将字符串 '123' 转换为整数
    SELECT 12.34::text; -- 将浮点数 12.34 转换为文本
  )
9、DATE_FORMAT(now(),'%Y%m%d%H%i%s') 改成 TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS');
10、str_to_date() 改 to_date(), TO_DATE 如果有时间,要用 TO_TIMESTAMP
11、GROUP_CONCAT()函数没有,使用 array_to_string(array_agg(target_name), ',')
12、时间差:TIME_TO_SEC(timediff(send_time, create_time)) 改为 EXTRACT(EPOCH FROM (send_time - create_time))
    timestampdiff(MINUTE,tr.create_time,NOW()) 改为 round(EXTRACT(EPOCH FROM (NOW() - tr.create_time))/60)
13、SELECT DATE '2023-07-19' + INTERVAL '1 days' AS new_date;
  select CURRENT_TIMESTAMP - INTERVAL '7 days' AS new_date;
  变量的时候:(#{touchOverdue} || 'HOUR')::INTERVAL
14、FIND_IN_SET(id,#{ids}) 换成 id::VARCHAR =ANY(string_to_array(#{ids}, ','))
15、instr()
16、字段类型和传入的变量类型必须一致
17、生成伪劣排序
mysql:Select (@i:=@i+1) As RowId,Null As Mobile From tmp_ew_customer_info a,(SELECT @i := 0) b
pgsql:Select ROW_NUMBER() OVER () as RowId,Null As Mobile From tmp_ew_customer_info a