sql加入查询日期格式

sql join query date format

我正在努力table查看(在 grafana 中)我的交易利润,我按日期对交易进行分组。

SELECT
close_date AS "Date",
(SELECT COUNT(*) FROM trades WHERE close_profit > 0 AND c2.close_date = close_date) AS Wins,
(SELECT COUNT(*) FROM trades WHERE close_profit < 0 AND c2.close_date = close_date) AS Losses,
(SELECT AVG(close_profit * 100) FROM trades WHERE c2.close_date = close_date) AS "Avg",
(SELECT SUM(close_profit_abs) FROM trades WHERE c2.close_date = close_date) AS "Profit"
FROM trades c2 WHERE close_date IS NOT NULL GROUP BY close_date

这将创建 table 交易列表,但不会按日期对交易进行分组,因为原始“close_date”的格式为“2021-09-20 11:11:12.954078 +0000 协调世界时。

如何设置 close_date 的格式以便只有日期 (2021-09-20) 并在连接查询中使用它? 我试过这个:

SELECT
date(close_date) AS "Date",
.....

这将 close_date 更改为我想要的日期,但分组将不起作用。

我试图将每个 close_date 更改为 date(close_date) 但随后整个语法中断。

SELECT
date(close_date) AS "Date",
(SELECT COUNT(*) FROM trades WHERE close_profit > 0 AND c2.date(close_date) = date(close_date)) AS Wins,
(SELECT COUNT(*) FROM trades WHERE close_profit < 0 AND c2.date(close_date) = date(close_date)) AS Losses,
(SELECT AVG(close_profit * 100) FROM trades WHERE c2.date(close_date) = date(close_date)) AS "Avg",
(SELECT SUM(close_profit_abs) FROM trades WHERE c2.date(close_date) = date(close_date)) AS "Profit"
FROM trades c2 WHERE date(close_date) IS NOT NULL GROUP BY date(close_date)

问题是:

c2.date(close_date)

如何格式化此处的日期时间?

c2.close_date (2021-09-20 11:11:12.954078 +0000 UTC) -> c2.date(close_date) (2021-09-20) ??

感谢您的帮助。我在任何方面都不是 sql 专家,所以我的术语可能“有点不对劲”。

您可以使用 CAST() & CONVERT() 函数

转换日期

阅读有关此功能的更多信息CONVERT() & CAST()

SELECT CONVERT(varchar(10),'2021-09-20 11:11:12.954078 +0000 UTC',105) AS [Date]

请参考此代码

SELECT
            CONVERT(varchar(10),close_date,105) AS "Date",
            (SELECT COUNT(*) FROM trades WHERE close_profit > 0 AND CONVERT(varchar(10),c2.close_date,105) = CONVERT(varchar(10),close_date,105)) AS Wins,
            (SELECT COUNT(*) FROM trades WHERE close_profit < 0 AND CONVERT(varchar(10),c2.close_date,105) = CONVERT(varchar(10),close_date,105)) AS Losses,
            (SELECT AVG(close_profit * 100) FROM trades WHERE CONVERT(varchar(10),c2.close_date,105) = CONVERT(varchar(10),close_date,105)) AS "Avg",
            (SELECT SUM(close_profit_abs) FROM trades WHERE CONVERT(varchar(10),c2.close_date,105) = CONVERT(varchar(10),close_date,105)) AS "Profit"
FROM trades c2 
WHERE CONVERT(varchar(10),close_date,105) IS NOT NULL 
GROUP BY CONVERT(varchar(10),close_date,105)

我能够让它工作。

SELECT
date(close_date) AS "Date",
(SELECT COUNT(*) FROM trades WHERE close_profit > 0 AND date(c2.close_date) = date(close_date)) AS Wins,
(SELECT COUNT(*) FROM trades WHERE close_profit < 0 AND date(c2.close_date) = date(close_date)) AS Losses,
(SELECT AVG(close_profit * 100) FROM trades WHERE date(c2.close_date) = date(close_date)) AS "Avg",
(SELECT SUM(close_profit_abs) FROM trades WHERE date(c2.close_date) = date(close_date)) AS "Profit"
FROM trades c2 WHERE date(close_date) IS NOT NULL GROUP BY date(close_date)