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
注释 -- 单行 / /* 多行 */ 同上 同上 同上
相关推荐
晴天¥7 小时前
Oracle中的安全管理(用户、权限、角色)
数据库·安全·oracle
Jelly-小丑鱼7 小时前
Linux搭建SQLserver数据库和Orical数据库
linux·运维·数据库·sqlserver·oracal·docker容器数据库
电商API&Tina7 小时前
【电商API接口】关于电商数据采集相关行业
java·python·oracle·django·sqlite·json·php
zhcf7 小时前
【MySQL】聚簇索引与非聚簇索引
数据库·mysql
小帅学编程8 小时前
JDBC学习
数据库·学习·oracle
姓蔡小朋友8 小时前
MySQL事务、InnoDB存储引擎
java·数据库·mysql
拾荒的小海螺8 小时前
MySQL:死锁问题分析与解决方案
数据库·mysql
玩转数据库管理工具FOR DBLENS8 小时前
关系型数据库与非关系型数据库:差异、介绍与市场格局
数据库·oracle·nosql
祁思妙想9 小时前
Python中ORM(对象关系映射)的概念与实操---连接数据库
数据库·oracle
镜花水月linyi10 小时前
MySQL与Redis缓存一致性方案
redis·后端·mysql