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
注释 -- 单行 / /* 多行 */ 同上 同上 同上
相关推荐
可乐ea1 分钟前
【知识获取与分享社区项目 | 项目日记第 21 天】索引构建与联想建议:Outbox 增量更新 + Completion Suggester
java·大数据·mysql·elasticsearch·搜索引擎
AI人工智能+电脑小能手14 分钟前
【大白话说Java面试题 第93题】【Mysql篇】第23题:从查找速度来看,聚集索引和非聚集索引哪个更快?
java·开发语言·数据库·mysql·面试
WPF工业上位机31 分钟前
YXGK.FakeVM数据库示例
jvm·数据库·oracle
数据库小学妹3 小时前
国产数据库技术成熟度实测:从Oracle兼容到高可用,四个维度评估能不能上生产
数据库·经验分享·oracle·性能优化·dba
流星白龙4 小时前
【MySQL高阶】20.InnoDB 磁盘文件
android·mysql·adb
AOwhisky4 小时前
学习自测(MySQL系列第一期、第二期)
linux·运维·数据库·学习·mysql·云计算
念何架构之路5 小时前
存储层技术MySQL
数据库·mysql
yun呐5 小时前
mysql数据库误删恢复
数据库·mysql·adb
j7~5 小时前
【MYSQL】图形化界面使用说明-- MYSQL(workbench)
数据库·mysql·mysql图形化界面·mysqlworkbench
_Kafka_5 小时前
Oracle EBS 有期间控制的模块
数据库·oracle