当前位置: 首页 > news >正文

Mysql、Oracle、Sql Server、达梦之间sql的差异

1:分页查询

Sql Server:

<bind name="startRow" value="(page - 1) * limit + 1"/>
<bind name="endRow" value="page * limit"/>
SELECT *FROM (SELECT ROW_NUMBER() OVER (<if test="sortZd!= null and sortZd!= ''">ORDER BY ${sortZd}<if test="sort!= null and sort!= ''">${sort}</if></if><!-- 默认排序 --><if test="sortZd == null or sortZd == ''">ORDER BY jy.JYSJ</if>) AS RowNum,<!-- 具体的查询sql -->
) AS PagedResults
WHERE RowNum BETWEEN #{startRow} AND #{endRow}

分页Count查询:

SELECT COUNT(*) AS total_count
FROM ( <!-- 具体的查询sql -->
) subquery;

Oracle:

<bind name="startRow" value="(page - 1) * limit + 1"/>
<bind name="endRow" value="page * limit"/>
SELECT * FROM (SELECT inn.*, ROWNUM AS rn FROM (SELECT * FROM ( ) a<!-- 动态排序逻辑(if标签实现) --><if test="sortZd != null and sortZd != ''">ORDER BY ${sortZd} <if test="sort != null and sort != ''">${sort}</if></if><!-- 默认排序 --><if test="(sortZd == null or sortZd == '') and sort == null">ORDER BY FYSJ DESC</if>) innWHERE ROWNUM &lt;= #{endRow})
WHERE rn &gt;= #{startRow}

分页Count查询:

SELECT COUNT(*) AS total_count
FROM ( ) subquery

达梦:

<bind name="startRow" value="(page - 1) * limit"/><bind name="endRow" value="limit"/>SELECT * FROM () a<if test="sortZd != null and sortZd != ''">ORDER BY ${sortZd}<if test="sort != null and sort != ''">${sort}</if></if><if test="sortZd == null or sortZd == ''">ORDER BY BATJ_XGRZ.xgsj DESC</if>
OFFSET #{startRow} ROWS FETCH FIRST #{endRow} ROWS ONLY

分页Count查询:

SELECT COUNT(*) AS total_count
FROM ( ) subquery

mysql:

SELECT * FROM table<br>ORDER BY col<br>LIMIT 10 OFFSET 10;

2:时间处理

功能OracleSQL Server达梦MySQL
日期格式化TO_CHAR(date, 'YYYY-MM-DD')CONVERT(VARCHAR, date, 23)TO_CHAR(date, 'YYYY-MM-DD')DATE_FORMAT(date, '%Y-%m-%d')
当前日期时间SYSDATEGETDATE()SYSDATENOW()
日期加减date + INTERVAL '1' DAYDATEADD(DAY, 1, date)date + INTERVAL '1' DAYdate + INTERVAL 1 DAY

Oracle:

BETWEEN TO_DATE(#{start}, 'YYYY-MM-DD') AND TO_DATE(#{end}, 'YYYY-MM-DD')TO_DATE(#{begDate}, 'YYYY-MM-DD')TO_DATE(#{endDate}, 'YYYY-MM-DD')TO_CHAR(DateColumn, 'YYYY-MM-DD') AS FormattedDate

Sql server:

CONVERT(VARCHAR(10), DateColumn, 23) AS FormattedDateCYRQ >= #{paramMap.begdate}AND CYRQ &lt; #{paramMap.plusDays}

达梦:

3:模糊查询

sqlserver:

<if test="dto.keyword != null and dto.keyword != ''">AND (SRM1 LIKE #{dto.keyword} + '%'OR MDMM LIKE '%' + #{dto.keyword} + '%'OR MBZM10 LIKE #{dto.keyword} + '%')</if>

oracle:

<if test="dto.keyword != null and dto.keyword != ''">AND (SRM1 LIKE #{dto.keyword} || '%'OR MDMM LIKE '%' || #{dto.keyword} || '%'OR MBZM10 LIKE #{dto.keyword} || '%')</if>

3:函数和语法差异

功能OracleSQL Server达梦MySQL
空值处理NVL(col, default)ISNULL(col, default)NVL(col, default)IFNULL(col, default)
条件表达式DECODE(col, val1, res1, res2)CASE WHEN col=val1 THEN res1...DECODE() 或 CASECASE WHEN...
自增主键SEQUENCE + TRIGGERIDENTITY(1,1)IDENTITY 或 SEQUENCEAUTO_INCREMENT
注释-- 单行 / /* 多行 */同上同上同上

相关文章:

  • 搭建游戏云服务器的配置要求包括哪些条件?
  • HOW - React NextJS 的同构机制
  • WebRTC中的几个Channel
  • 【网络编程】十、详解 UDP 协议
  • Python教程(五)——模块
  • c/c++的opencv的图像预处理讲解
  • MapReduce Shuffle 全解析:从 Map 端到 Reduce 端的核心数据流​
  • Spring bean 的生命周期、注入方式和作用域
  • C41-为什么要用指针
  • ubuntu环境下 基于Python 打包的 批量命令行可视化操作工具 GUI
  • Vue3项目使用ElDrawer后select方法不生效
  • 分布式 ID 生成的五种方法:优缺点与适用场景
  • 【C++】 —— 笔试刷题day_29
  • 界面控件DevExpress WinForms中文教程:Banded Grid View - API
  • 项目依赖版本修改
  • TensorFlow/Keras实现知识蒸馏案例
  • Tor推出Oniux新工具:为Linux应用提供网络流量匿名化
  • Graph Representation Learning【图最短路径优化/Node2vec/Deepwalk】
  • PR-2021
  • android 安装openwrt 安正步骤
  • 新华时评:博物馆正以可亲可近替代“高冷范儿”
  • 陕西省市监局通报5批次不合格食品,涉添加剂超标、微生物污染等问题
  • 淄博一酒店房间内被曝发现摄像头,当地警方已立案调查
  • 侵害孩子者,必严惩不贷!3名性侵害未成年人罪犯今日执行死刑
  • 中国人民银行等四部门联合召开科技金融工作交流推进会
  • 南京江宁区市监局通报:盒马一批次猕猴桃检出膨大剂超标