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

1:分页查询

Sql Server:

XML 复制代码
<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查询:

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

Oracle:

XML 复制代码
<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>
        ) inn
        WHERE ROWNUM &lt;= #{endRow}
    )
WHERE rn &gt;= #{startRow}

分页Count查询:

XML 复制代码
SELECT COUNT(*) AS total_count
FROM ( 
    
) subquery

达梦:

XML 复制代码
<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查询:

XML 复制代码
SELECT COUNT(*) AS total_count
FROM ( 
    
) subquery

mysql:

XML 复制代码
SELECT * FROM table<br>ORDER BY col<br>LIMIT 10 OFFSET 10;

2:时间处理

功能 Oracle SQL Server 达梦 MySQL
日期格式化 TO_CHAR(date, 'YYYY-MM-DD') CONVERT(VARCHAR, date, 23) TO_CHAR(date, 'YYYY-MM-DD') DATE_FORMAT(date, '%Y-%m-%d')
当前日期时间 SYSDATE GETDATE() SYSDATE NOW()
日期加减 date + INTERVAL '1' DAY DATEADD(DAY, 1, date) date + INTERVAL '1' DAY date + INTERVAL 1 DAY

Oracle:

XML 复制代码
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:

XML 复制代码
CONVERT(VARCHAR(10), DateColumn, 23) AS FormattedDate

  CYRQ >= #{paramMap.begdate}
        AND CYRQ &lt; #{paramMap.plusDays}

达梦:

3:模糊查询

sqlserver:

XML 复制代码
<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:

XML 复制代码
<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:函数和语法差异

功能 Oracle SQL 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()CASE CASE WHEN...
自增主键 SEQUENCE + TRIGGER IDENTITY(1,1) IDENTITYSEQUENCE AUTO_INCREMENT
注释 -- 单行 / /* 多行 */ 同上 同上 同上
相关推荐
程序员岳焱1 小时前
Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
后端·mysql·性能优化
喜欢敲代码的程序员2 小时前
SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:项目搭建(一)
spring boot·mysql·elementui·vue·mybatis
AI、少年郎2 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
钢铁男儿2 小时前
C# 委托(调用带引用参数的委托)
java·mysql·c#
叁沐2 小时前
MySQL 02 日志系统:一条SQL更新语句是如何执行的?
mysql
RunsenLIu2 小时前
基于Vue.js + Node.js + MySQL实现的图书销售管理系统
vue.js·mysql·node.js
码不停蹄的玄黓2 小时前
MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣
数据库·mysql·undo log·回滚日志
Arthurmoo3 小时前
Linux系统之MySQL数据库基础
linux·数据库·mysql
Tangcan-3 小时前
【MySQL】 内置函数
mysql
找不到、了4 小时前
MySQL的窗口函数介绍
数据库·mysql