将 Oracle 查询转换为 MySQL 查询
Posted
技术标签:
【中文标题】将 Oracle 查询转换为 MySQL 查询【英文标题】:Converting an Oracle to MySQL Query 【发布时间】:2018-11-01 00:33:24 【问题描述】:任何人都可以提供帮助或建议吗?我是 Oracle 新手,我有这个查询需要转换为 mysql 查询
with dset as (
select count(column_1) as Volumes, to_char(creation_date,'MM-YYYY') as
Month, REPLACE(record_type, 3, 2) as RecordType from
table_1 where
transaction_type = 'PG' and
category = 'CCB' and
trunc(creation_date) >= to_date(?1, 'DD/MM/YYYY') and
trunc(creation_date) <= to_date(?2, 'DD/MM/YYYY')
group by to_char(creation_date,'MM-YYYY'), REPLACE(record_type, 3, 2)
)
SELECT x.DateMonth
,MAX(DECODE(x.RecordType, '1', x.Volumes)) CONSUMER
,MAX(DECODE(x.RecordType, '2', x.Volumes)) COMMERCIAL
FROM (
SELECT r.DateMonth
,r.RecordType
,r.Volumes
FROM dset r
) x
GROUP BY x.DatetMonth
让这个查询在 MySQL 中工作的最佳方法是什么。
非常感谢
【问题讨论】:
相关问题***.com/questions/17600071/… 哪个版本的mysql? @P.Salmon 我正在使用 SQL Server Managemnt Studio v17.6 SSMS 不是数据库(通常与 sql server 而非 oracle 或 mysql 一起使用)所以问题仍然是 mysql 的哪个版本? 我敢打赌,它还包含 Microsoft SQL Server 字样,如果出现此问题,则标记不正确(应标记为 sqlserver)。正确获取这些基本信息很重要 - mysql 和 sqlserver 不一样,如果对标签存在不确定性,最好的情况是您会得到延迟响应,最坏的情况是一个有效但不在您想要的数据库中的解决方案。 【参考方案1】:SQL 通常在不同的数据库系统中遵循某些标准。因此,您的查询应该主要适用于所有 SQL 平台。但是有些内置函数是不同的。
最好的方法是尝试运行查询并查看它生成的错误并解决它们。
您必须查看convert
MSSQL 函数的文档,因为您将需要它。
如果你卡住了,你可以问一个更具体的问题,说明你卡住的是什么。
【讨论】:
自从将 Oracle 数据库迁移到 SQL Server 以来,很多数据库表名都已更改,这就是我遇到错误的地方。我想检查一般查询是否可以在 SQL 中运行。所以感谢大家对此的建议。我将尝试运行查询并处理生成的错误。 嗨,在我的 SSMS 查询中,我试图找出上面查询的部分内容。到目前为止,在我的 recordType 列中,我返回了 1 和 2 我想在 SSMS,MAX(DECODE(x.RecordType, '1', x.Volumes)) CONSUMER ,MAX(DECODE(x.RecordType, '2', x.Volumes)) COMMERCIAL
中运行此查询,最终结果应该给我 1 = 消费者和 2 = 商业 知道我做错了什么吗?上面的完整查询在 Oracle 中有效,但在 SSMS 中无效。
MSSQL 中没有DECODE
函数。查找case
表达式或三元函数iif
以上是关于将 Oracle 查询转换为 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何将 MySQL 查询转换为等效的 Oracle sql 查询
如何将 MS-SQL Server SELECT 查询转换/迁移到 Oracle 和 MySQL?