mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-29 11:02:08 +00:00
Merge pull request #4298 from vitlibar/add-function-to-start-of-ten-minutes
Add function toStartOfTenMinutes().
This commit is contained in:
commit
7ff5439971
@ -188,6 +188,22 @@ struct ToStartOfFiveMinuteImpl
|
|||||||
using FactorTransform = ZeroTransform;
|
using FactorTransform = ZeroTransform;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ToStartOfTenMinutesImpl
|
||||||
|
{
|
||||||
|
static constexpr auto name = "toStartOfTenMinutes";
|
||||||
|
|
||||||
|
static inline UInt32 execute(UInt32 t, const DateLUTImpl & time_zone)
|
||||||
|
{
|
||||||
|
return time_zone.toStartOfTenMinutes(t);
|
||||||
|
}
|
||||||
|
static inline UInt32 execute(UInt16, const DateLUTImpl &)
|
||||||
|
{
|
||||||
|
return dateIsNotSupported(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
using FactorTransform = ZeroTransform;
|
||||||
|
};
|
||||||
|
|
||||||
struct ToStartOfFifteenMinutesImpl
|
struct ToStartOfFifteenMinutesImpl
|
||||||
{
|
{
|
||||||
static constexpr auto name = "toStartOfFifteenMinutes";
|
static constexpr auto name = "toStartOfFifteenMinutes";
|
||||||
|
@ -21,6 +21,7 @@ void registerFunctionToStartOfQuarter(FunctionFactory &);
|
|||||||
void registerFunctionToStartOfYear(FunctionFactory &);
|
void registerFunctionToStartOfYear(FunctionFactory &);
|
||||||
void registerFunctionToStartOfMinute(FunctionFactory &);
|
void registerFunctionToStartOfMinute(FunctionFactory &);
|
||||||
void registerFunctionToStartOfFiveMinute(FunctionFactory &);
|
void registerFunctionToStartOfFiveMinute(FunctionFactory &);
|
||||||
|
void registerFunctionToStartOfTenMinutes(FunctionFactory &);
|
||||||
void registerFunctionToStartOfFifteenMinutes(FunctionFactory &);
|
void registerFunctionToStartOfFifteenMinutes(FunctionFactory &);
|
||||||
void registerFunctionToStartOfHour(FunctionFactory &);
|
void registerFunctionToStartOfHour(FunctionFactory &);
|
||||||
void registerFunctionToStartOfISOYear(FunctionFactory &);
|
void registerFunctionToStartOfISOYear(FunctionFactory &);
|
||||||
@ -82,6 +83,7 @@ void registerFunctionsDateTime(FunctionFactory & factory)
|
|||||||
registerFunctionToStartOfYear(factory);
|
registerFunctionToStartOfYear(factory);
|
||||||
registerFunctionToStartOfMinute(factory);
|
registerFunctionToStartOfMinute(factory);
|
||||||
registerFunctionToStartOfFiveMinute(factory);
|
registerFunctionToStartOfFiveMinute(factory);
|
||||||
|
registerFunctionToStartOfTenMinutes(factory);
|
||||||
registerFunctionToStartOfFifteenMinutes(factory);
|
registerFunctionToStartOfFifteenMinutes(factory);
|
||||||
registerFunctionToStartOfHour(factory);
|
registerFunctionToStartOfHour(factory);
|
||||||
registerFunctionToStartOfISOYear(factory);
|
registerFunctionToStartOfISOYear(factory);
|
||||||
|
20
dbms/src/Functions/toStartOfTenMinutes.cpp
Normal file
20
dbms/src/Functions/toStartOfTenMinutes.cpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#include <Functions/IFunction.h>
|
||||||
|
#include <Functions/FunctionFactory.h>
|
||||||
|
#include <Functions/DateTimeTransforms.h>
|
||||||
|
#include <Functions/FunctionDateOrDateTimeToSomething.h>
|
||||||
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace DB
|
||||||
|
{
|
||||||
|
|
||||||
|
using FunctionToStartOfTenMinutes = FunctionDateOrDateTimeToSomething<DataTypeDateTime, ToStartOfTenMinutesImpl>;
|
||||||
|
|
||||||
|
void registerFunctionToStartOfTenMinutes(FunctionFactory & factory)
|
||||||
|
{
|
||||||
|
factory.registerFunction<FunctionToStartOfTenMinutes>();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -58,16 +58,31 @@
|
|||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
2014-09-30 23:50:00
|
2019-02-06 22:57:00
|
||||||
2014-09-30 21:50:00
|
2019-02-06 20:57:00
|
||||||
2014-09-30 20:50:00
|
2019-02-06 19:57:00
|
||||||
2014-10-01 04:50:00
|
2019-02-07 04:57:00
|
||||||
2014-09-30 11:50:00
|
2019-02-06 11:57:00
|
||||||
2014-09-30 23:00:00
|
2019-02-06 22:55:00
|
||||||
2014-09-30 21:00:00
|
2019-02-06 20:55:00
|
||||||
2014-09-30 20:00:00
|
2019-02-06 19:55:00
|
||||||
2014-10-01 04:00:00
|
2019-02-07 04:55:00
|
||||||
2014-09-30 11:00:00
|
2019-02-06 11:55:00
|
||||||
|
2019-02-06 22:50:00
|
||||||
|
2019-02-06 20:50:00
|
||||||
|
2019-02-06 19:50:00
|
||||||
|
2019-02-07 04:50:00
|
||||||
|
2019-02-06 11:50:00
|
||||||
|
2019-02-06 22:45:00
|
||||||
|
2019-02-06 20:45:00
|
||||||
|
2019-02-06 19:45:00
|
||||||
|
2019-02-07 04:45:00
|
||||||
|
2019-02-06 11:45:00
|
||||||
|
2019-02-06 22:00:00
|
||||||
|
2019-02-06 20:00:00
|
||||||
|
2019-02-06 19:00:00
|
||||||
|
2019-02-07 04:00:00
|
||||||
|
2019-02-06 11:00:00
|
||||||
44
|
44
|
||||||
44
|
44
|
||||||
44
|
44
|
||||||
|
@ -104,19 +104,43 @@ SELECT toSecond(toDateTime(1412106600), 'Pacific/Pitcairn');
|
|||||||
|
|
||||||
/* toStartOfMinute */
|
/* toStartOfMinute */
|
||||||
|
|
||||||
SELECT toString(toStartOfMinute(toDateTime(1412106600), 'Europe/Moscow'), 'Europe/Moscow');
|
SELECT toString(toStartOfMinute(toDateTime(1549483055), 'Europe/Moscow'), 'Europe/Moscow');
|
||||||
SELECT toString(toStartOfMinute(toDateTime(1412106600), 'Europe/Paris'), 'Europe/Paris');
|
SELECT toString(toStartOfMinute(toDateTime(1549483055), 'Europe/Paris'), 'Europe/Paris');
|
||||||
SELECT toString(toStartOfMinute(toDateTime(1412106600), 'Europe/London'), 'Europe/London');
|
SELECT toString(toStartOfMinute(toDateTime(1549483055), 'Europe/London'), 'Europe/London');
|
||||||
SELECT toString(toStartOfMinute(toDateTime(1412106600), 'Asia/Tokyo'), 'Asia/Tokyo');
|
SELECT toString(toStartOfMinute(toDateTime(1549483055), 'Asia/Tokyo'), 'Asia/Tokyo');
|
||||||
SELECT toString(toStartOfMinute(toDateTime(1412106600), 'Pacific/Pitcairn'), 'Pacific/Pitcairn');
|
SELECT toString(toStartOfMinute(toDateTime(1549483055), 'Pacific/Pitcairn'), 'Pacific/Pitcairn');
|
||||||
|
|
||||||
|
/* toStartOfFiveMinute */
|
||||||
|
|
||||||
|
SELECT toString(toStartOfFiveMinute(toDateTime(1549483055), 'Europe/Moscow'), 'Europe/Moscow');
|
||||||
|
SELECT toString(toStartOfFiveMinute(toDateTime(1549483055), 'Europe/Paris'), 'Europe/Paris');
|
||||||
|
SELECT toString(toStartOfFiveMinute(toDateTime(1549483055), 'Europe/London'), 'Europe/London');
|
||||||
|
SELECT toString(toStartOfFiveMinute(toDateTime(1549483055), 'Asia/Tokyo'), 'Asia/Tokyo');
|
||||||
|
SELECT toString(toStartOfFiveMinute(toDateTime(1549483055), 'Pacific/Pitcairn'), 'Pacific/Pitcairn');
|
||||||
|
|
||||||
|
/* toStartOfTenMinutes */
|
||||||
|
|
||||||
|
SELECT toString(toStartOfTenMinutes(toDateTime(1549483055), 'Europe/Moscow'), 'Europe/Moscow');
|
||||||
|
SELECT toString(toStartOfTenMinutes(toDateTime(1549483055), 'Europe/Paris'), 'Europe/Paris');
|
||||||
|
SELECT toString(toStartOfTenMinutes(toDateTime(1549483055), 'Europe/London'), 'Europe/London');
|
||||||
|
SELECT toString(toStartOfTenMinutes(toDateTime(1549483055), 'Asia/Tokyo'), 'Asia/Tokyo');
|
||||||
|
SELECT toString(toStartOfTenMinutes(toDateTime(1549483055), 'Pacific/Pitcairn'), 'Pacific/Pitcairn');
|
||||||
|
|
||||||
|
/* toStartOfTenMinutes */
|
||||||
|
|
||||||
|
SELECT toString(toStartOfFifteenMinutes(toDateTime(1549483055), 'Europe/Moscow'), 'Europe/Moscow');
|
||||||
|
SELECT toString(toStartOfFifteenMinutes(toDateTime(1549483055), 'Europe/Paris'), 'Europe/Paris');
|
||||||
|
SELECT toString(toStartOfFifteenMinutes(toDateTime(1549483055), 'Europe/London'), 'Europe/London');
|
||||||
|
SELECT toString(toStartOfFifteenMinutes(toDateTime(1549483055), 'Asia/Tokyo'), 'Asia/Tokyo');
|
||||||
|
SELECT toString(toStartOfFifteenMinutes(toDateTime(1549483055), 'Pacific/Pitcairn'), 'Pacific/Pitcairn');
|
||||||
|
|
||||||
/* toStartOfHour */
|
/* toStartOfHour */
|
||||||
|
|
||||||
SELECT toString(toStartOfHour(toDateTime(1412106600), 'Europe/Moscow'), 'Europe/Moscow');
|
SELECT toString(toStartOfHour(toDateTime(1549483055), 'Europe/Moscow'), 'Europe/Moscow');
|
||||||
SELECT toString(toStartOfHour(toDateTime(1412106600), 'Europe/Paris'), 'Europe/Paris');
|
SELECT toString(toStartOfHour(toDateTime(1549483055), 'Europe/Paris'), 'Europe/Paris');
|
||||||
SELECT toString(toStartOfHour(toDateTime(1412106600), 'Europe/London'), 'Europe/London');
|
SELECT toString(toStartOfHour(toDateTime(1549483055), 'Europe/London'), 'Europe/London');
|
||||||
SELECT toString(toStartOfHour(toDateTime(1412106600), 'Asia/Tokyo'), 'Asia/Tokyo');
|
SELECT toString(toStartOfHour(toDateTime(1549483055), 'Asia/Tokyo'), 'Asia/Tokyo');
|
||||||
SELECT toString(toStartOfHour(toDateTime(1412106600), 'Pacific/Pitcairn'), 'Pacific/Pitcairn');
|
SELECT toString(toStartOfHour(toDateTime(1549483055), 'Pacific/Pitcairn'), 'Pacific/Pitcairn');
|
||||||
|
|
||||||
/* toRelativeYearNum */
|
/* toRelativeYearNum */
|
||||||
|
|
||||||
|
@ -284,6 +284,15 @@ public:
|
|||||||
inline time_t toStartOfFiveMinute(time_t t) const { return t / 300 * 300; }
|
inline time_t toStartOfFiveMinute(time_t t) const { return t / 300 * 300; }
|
||||||
inline time_t toStartOfFifteenMinutes(time_t t) const { return t / 900 * 900; }
|
inline time_t toStartOfFifteenMinutes(time_t t) const { return t / 900 * 900; }
|
||||||
|
|
||||||
|
inline time_t toStartOfTenMinutes(time_t t) const
|
||||||
|
{
|
||||||
|
if (offset_is_whole_number_of_hours_everytime)
|
||||||
|
return t / 600 * 600;
|
||||||
|
|
||||||
|
time_t date = find(t).date;
|
||||||
|
return date + (t - date) / 600 * 600;
|
||||||
|
}
|
||||||
|
|
||||||
inline time_t toStartOfHour(time_t t) const
|
inline time_t toStartOfHour(time_t t) const
|
||||||
{
|
{
|
||||||
if (offset_is_whole_number_of_hours_everytime)
|
if (offset_is_whole_number_of_hours_everytime)
|
||||||
|
Loading…
Reference in New Issue
Block a user