【发布时间】:2019-10-24 08:22:02
【问题描述】:
我正在努力创建 MariaDB SQL 命令,这些命令将产生与我目前在 MS Access 数据库中使用的这三个查询(如下)相同的输出。我的 Excel VBA 脚本使用 only 这个 SQL 命令调用下面的第三个 SQL 查询命令(Hours to Heat Elecric WH),其中日期值被动态替换。出于这个问题的目的,该命令看起来像这样:
SELECT ElectricWH_Data.*
FROM ElectricWH_Data
WHERE (ElectricWH_Data.Date_Reading) > #06/01/19#;
这是结果表的摘要:
Date_Time 日期时间 最大 WH 输出 最小 WH 输出 18 年 6 月 27 日 0:52 18 年 6 月 27 日 00.52 60.38 43.56 18 年 6 月 28 日 0:52 18 年 6 月 28 日 00.52 60.50 44.44 18 年 6 月 29 日 0:32 18 年 6 月 29 日 00.32 60.13 45.38 18 年 6 月 30 日 0:32 18 年 6 月 30 日 00.32 60.19 47.13 7/1/18 0:12 07/01/18 00.12 60.50 47.56 7/2/18 0:42 07/02/18 00.42 60.44 44.94 7/3/18 0:42 07/03/18 00.42 60.38 46.88我想复制这个过程,但使用 MariaDB 数据库和 SQL 命令。你能帮忙吗?
顺便说一下,我知道在 MariaDB 中日期和日期格式的处理方式不同。
以下是来自 MS Access 数据库的 SQL 查询。
GetTemDataByDay:
SELECT
Min(PiSolarWH.Electric_WH_Out) AS MinOfElectric_WH_Out,
Max(PiSolarWH.Electric_WH_Out) AS MaxOfElectric_WH_Out,
Format(PiSolarWH.Date_Reading,'mm/dd/yy') AS TheDay
FROM
PiSolarWH
GROUP BY
Format(PiSolarWH.Date_Reading,'mm/dd/yy');
ElectricWHData:
SELECT
PiSolarWH.Date_Reading,
Format([PiSolarWH.Date_Reading],'mm/dd/yy') AS TheDate,
Format([Date_Reading],'hh.mm') AS DayTime,
GetTempDataByDay.MaxOfElectric_WH_Out AS Expr1,
GetTempDataByDay.MinOfElectric_WH_Out AS Expr2
FROM
GetTempDataByDay, PiSolarWH
WHERE
Format([PiSolarWH.Date_Reading],'mm/dd/yy') = [GetTempDataByDay].[TheDay]
AND GetTempDataByDay.MaxOfElectric_WH_Out = [PiSolarWH].[Electric_WH_Out];
加热电 WH 的时间:
SELECT
PiSolarWH.Date_Reading,
Format([Date_Reading],'hh.mm') AS DayTime,
GetTempDataByDay.MaxOfElectric_WH_Out,
PiSolarWH.Electric_WH_Out,
Format([PiSolarWH.Date_Reading],'mm/dd/yy') AS Expr1
FROM
GetTempDataByDay,
PiSolarWH
WHERE
GetTempDataByDay.MaxOfElectric_WH_Out = [PiSolarWH].[Electric_WH_Out]
AND Format([PiSolarWH.Date_Reading],'mm/dd/yy') = [GetTempDataByDay].[TheDay];
【问题讨论】:
-
这些查询是否填充表,例如 MS Access 中的生成或追加表查询?似乎有比必要更多的格式化......无论如何,对于 MySQL/MariaDB,不需要带有表和/或列名的
[],因为通常使用tableName.columnName,或者只是columnName取决于查询以避免歧义。要格式化日期,就像你的一样,将是:DATE_FORMAT(Date_Reading, '%m/%d/%y')...时间将是TIME_FORMAT(Date_Reading, '%h.%i')。与 MS Access 不同,日期字符串用单引号括起来,而不是#字符。 -
查询“GetTemDataByDay”在其他两个查询中被引用。至少 5 年前,当我使用 MS Access 和经典 ASP 页面时,我编写了这些查询。他们做了我想要的。但现在我尝试学习 MariaDB,并将旧的 ASP SQL 代码转换为我可以通过 MariaDB 设置运行的东西。我知道 MS SQL、SQL 和 MariaDB 之间的格式问题。
-
没关系,那你还需要了解哪些其他方面的信息呢? ...这些只是上一条评论中的概述。我已经将一些 MS Access 的东西转换成 MySQL。
-
很多很多事情需要改变。没有括号,完全不同的日期处理等等。
-
恐怕我的问题可能还不清楚。我了解 MS SQL 和 MariaDB SQL 之间的功能和格式差异,但感谢您的提醒。我试图了解是否可以使用 MariaDB 在其他查询或 SQL 语句中重复使用存储的 MS 查询。例如,您会注意到“GetTemDataByDay”在“ElectricWHData”和“Hours to Heat Elecric WH”中都被引用,“GetTemDataByDay”和“ElectricWHData”都在“Hours to Heat Elecric WH”中被引用。我在 MariaDB 中看不到如何做到这一点。