Ani*_*rya 6 php mysql sql timezone laravel
我在 PHP Laravel 中有这样的查询:
$sensor_data = DB::table('devices_sensor_data as D')
->select(DB::raw('
D.id,
COALESCE(D.DeviceId,dx.DeviceId) AS DeviceId,
D.ENERGY_Total,
D.Time')
)
->join(DB::raw('
(SELECT
MIN(CONVERT_TZ(Time, "'.$dbTz.'", "'.$usrTz.'")) min_time,
MAX(CONVERT_TZ(Time, "'.$dbTz.'", "'.$usrTz.'")) max_time,
DeviceId
FROM devices_sensor_data
WHERE DATE(Time) BETWEEN "'.$fromTzTime.'" AND "'.$toTzTime.'"
AND DeviceId IN (\''.$arrayDeviceID.'\')
GROUP BY DATE(Time), DeviceId ORDER BY DATE(Time)
) AS dx'
),
function($join)
{
$join->on(DB::raw('D.Time = `dx`.`min_time` OR D.Time'), '=', 'dx.max_time');
$join->where('D.DeviceId', '=', DB::raw('dx.DeviceId'));
})
->whereIn('D.DeviceId', array_keys($devicesArr))
->whereDate('D.Time', '>=', $fromTzTime)
->whereDate('D.Time', '<=', $toTzTime);
$sensor_data = $sensor_data
->orderBy('D.DeviceId')
->orderBy('D.Time')
->get();
Run Code Online (Sandbox Code Playgroud)
我想选择MIN
并MAX
基于与默认时区不同的基于用户的时区,现在是Asia/Kolkata,所以我想根据例如来选择它。美国/纽约。
它根据 IST 时区返回最小值和最大值,然后将其转换为纽约计时,但我想根据纽约时区获取最小值和最大值。
您确实需要使用 CONVERT_TZ。让我创建一个示例数据库和数据:
create table MyTimes(
id int auto_increment primary key,
moment timestamp
);
insert into MyTimes(moment) values
('2021-01-02 00:00:00'),
('2021-01-01 00:00:00'),
('2021-01-04 00:00:00'),
('2021-01-03 00:00:00');
Run Code Online (Sandbox Code Playgroud)
现在让我们select
使用时区转换的最小值和最大值:
select min(convert_tz(moment, '+05:30', '+01:00')) minimum, max(convert_tz(moment, '+05:30', '+01:00')) maximum
from MyTimes;
Run Code Online (Sandbox Code Playgroud)
小提琴: http: //sqlfiddle.com/#!9/cfca54f /4
现在,让我们看看这个示例中发生了什么:
moment
convert_tz
moment
作为第一个参数传递 归档时间: |
|
查看次数: |
522 次 |
最近记录: |