75 lines
2.6 KiB
SQL
75 lines
2.6 KiB
SQL
-- 将旧数据的时间更新为北京时间(UTC+8)
|
||
-- 假设旧数据存储的是UTC时间或服务器本地时间,需要转换为北京时间
|
||
--
|
||
-- 注意:此脚本假设旧数据的时间是UTC时间(或服务器本地时间,需要根据实际情况调整)
|
||
-- 如果旧数据已经是北京时间,则不需要运行此脚本
|
||
--
|
||
-- 使用方法:
|
||
-- 1. 先备份数据库
|
||
-- 2. 根据实际情况调整时间偏移量(CONVERT_TZ 的第二个参数)
|
||
-- 3. 运行此脚本
|
||
|
||
USE `auto_trade_sys`;
|
||
|
||
-- 检查当前时区设置
|
||
SELECT @@global.time_zone, @@session.time_zone;
|
||
|
||
-- 方法1:如果旧数据是UTC时间,直接加8小时转换为北京时间
|
||
-- 更新 entry_time(入场时间)
|
||
UPDATE `trades`
|
||
SET `entry_time` = DATE_ADD(`entry_time`, INTERVAL 8 HOUR)
|
||
WHERE `entry_time` IS NOT NULL
|
||
AND `entry_time` < '2025-01-01 00:00:00'; -- 只更新2025年之前的数据(根据实际情况调整)
|
||
|
||
-- 更新 exit_time(平仓时间)
|
||
UPDATE `trades`
|
||
SET `exit_time` = DATE_ADD(`exit_time`, INTERVAL 8 HOUR)
|
||
WHERE `exit_time` IS NOT NULL
|
||
AND `exit_time` < '2025-01-01 00:00:00'; -- 只更新2025年之前的数据(根据实际情况调整)
|
||
|
||
-- 方法2:如果旧数据是服务器本地时间(需要根据服务器时区调整)
|
||
-- 例如,如果服务器是UTC+0,则加8小时;如果服务器是UTC+5,则加3小时
|
||
-- 请根据实际情况调整 INTERVAL 的值
|
||
--
|
||
-- UPDATE `trades`
|
||
-- SET `entry_time` = DATE_ADD(`entry_time`, INTERVAL 8 HOUR)
|
||
-- WHERE `entry_time` IS NOT NULL;
|
||
--
|
||
-- UPDATE `trades`
|
||
-- SET `exit_time` = DATE_ADD(`exit_time`, INTERVAL 8 HOUR)
|
||
-- WHERE `exit_time` IS NOT NULL;
|
||
|
||
-- 方法3:如果MySQL支持时区转换函数(需要加载时区数据)
|
||
-- 首先需要加载时区数据:mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
|
||
--
|
||
-- UPDATE `trades`
|
||
-- SET `entry_time` = CONVERT_TZ(`entry_time`, 'UTC', 'Asia/Shanghai')
|
||
-- WHERE `entry_time` IS NOT NULL;
|
||
--
|
||
-- UPDATE `trades`
|
||
-- SET `exit_time` = CONVERT_TZ(`exit_time`, 'UTC', 'Asia/Shanghai')
|
||
-- WHERE `exit_time` IS NOT NULL;
|
||
|
||
-- 验证更新结果(查看最近几条记录的时间)
|
||
SELECT
|
||
id,
|
||
symbol,
|
||
entry_time,
|
||
exit_time,
|
||
status,
|
||
TIMESTAMPDIFF(HOUR, entry_time, COALESCE(exit_time, NOW())) as duration_hours
|
||
FROM `trades`
|
||
ORDER BY id DESC
|
||
LIMIT 10;
|
||
|
||
-- 统计信息
|
||
SELECT
|
||
COUNT(*) as total_trades,
|
||
COUNT(CASE WHEN entry_time IS NOT NULL THEN 1 END) as has_entry_time,
|
||
COUNT(CASE WHEN exit_time IS NOT NULL THEN 1 END) as has_exit_time,
|
||
MIN(entry_time) as earliest_entry,
|
||
MAX(entry_time) as latest_entry,
|
||
MIN(exit_time) as earliest_exit,
|
||
MAX(exit_time) as latest_exit
|
||
FROM `trades`;
|