五、clickhouse處理時間日期函數概述(1)


--1.概述

--所有對時區有邏輯用途的處理日期和時間的函數都可以接受第二個可選的時區參數。支持時區。示例:Asia/Yekaterinburg。在這種情況下,他們使用指定的時區而不是本地(默認)時區。

SELECT
    toDateTime('2016-06-15 23:00:00') AS time,
    toDate(time) AS date_local,
    toDate(time, 'Asia/Yekaterinburg') AS date_yekat,
    toString(time, 'US/Samoa') AS time_samoa

Query id: 1a4f8d81-c173-46a0-b3df-ce4204268fc6

┌────────────────time─┬─date_local─┬─date_yekat─┬─time_samoa──────────┐
│ 2016-06-15 23:00:002016-06-152016-06-152016-06-15 04:00:00 │
└─────────────────────┴────────────┴────────────┴─────────────────────┘

1 rows in set. Elapsed: 0.036 sec. 

 

--2.timeZone() 

--返回服務器的時區。如果它在分布式表的上下文中執行,那么它會生成一個普通列,其中包含與每個分片相關的值。否則它會產生一個常數值。

句法

timeZone()

別名:timezone

返回值

  • 時區。

類型:字符串

--3.toTimeZone

--將時間或日期和時間轉換為指定的時區。時區是DateDateTime數據類型的屬性。表字段或結果集列的內部值(秒數)不會改變,列的類型會改變,其字符串表示也會相應改變。

句法

toTimezone(value, timezone)

別名:toTimezone

論據

  • value— 時間或日期和時間。日期時間64
  • timezone— 返回值的時區。字符串此參數是一個常量,因為toTimezone更改了列的時區(時區是DateTime*類型的屬性)。

返回值

  • 日期和時間。

類型:日期時間。

例子

SELECT
    toDateTime('2019-01-01 00:00:00', 'UTC') AS time_utc,
    toTypeName(time_utc) AS type_utc,
    toInt32(time_utc) AS int32utc,
    toTimeZone(time_utc, 'Asia/Yekaterinburg') AS time_yekat,
    toTypeName(time_yekat) AS type_yekat,
    toInt32(time_yekat) AS int32yekat,
    toTimeZone(time_utc, 'US/Samoa') AS time_samoa,
    toTypeName(time_samoa) AS type_samoa,
    toInt32(time_samoa) AS int32samoa
FORMAT Vertical

Query id: 6ca651bc-4347-49ff-a0e7-cab1f5eb62d9

Row 1:
──────
time_utc:   2019-01-01 00:00:00
type_utc:   DateTime('UTC')
int32utc:   1546300800
time_yekat: 2019-01-01 05:00:00
type_yekat: DateTime('Asia/Yekaterinburg')
int32yekat: 1546300800
time_samoa: 2018-12-31 13:00:00
type_samoa: DateTime('US/Samoa')
int32samoa: 1546300800

1 rows in set. Elapsed: 0.038 sec. 

--toTimeZone(time_utc, 'Asia/Yekaterinburg')將DateTime('UTC')類型更改為DateTime('Asia/Yekaterinburg'). 值 (Unixtimestamp) 1546300800 保持不變,但字符串表示形式(toString() 函數的結果)從time_utc: 2019-01-01 00:00:00變為time_yekat: 2019-01-01 05:00:00。

 

--4.timeZoneOf 

--返回DateTimeDateTime64數據類型的時區名稱。

句法

timeZoneOf(value)

別名:timezoneOf

論據

  • value- 日期和時間。DateTimeDateTime64

返回值

  • 時區名稱。

類型:字符串

例子

SELECT timezoneOf(now())

Query id: c5a9c385-9a68-4916-8f1a-329cb4c9fd83

┌─timezoneOf(now())─┐
│ Asia/Shanghai     │
└───────────────────┘

1 rows in set. Elapsed: 0.003 sec. 

 

--5.timeZoneOffset

--從UTC返回以秒為單位的時區偏移量該函數考慮了指定日期和時間的夏令時和歷史時區變化。 IANA 時區數據庫用於計算偏移量。

句法

timeZoneOffset(value)

別名:timezoneOffset

論據

  • value- 日期和時間。DateTimeDateTime64

返回值

  • 以秒為單位的 UTC 偏移量。

類型:Int32

例子

SELECT
    toDateTime('2021-04-21 10:20:30', 'America/New_York') AS Time,
    toTypeName(Time) AS Type,
    timeZoneOffset(Time) AS Offset_in_seconds,
    Offset_in_seconds / 3600 AS Offset_in_hours

Query id: a9e7279f-8d12-4c51-8cb4-0123f062a597

┌────────────────Time─┬─Type─────────────────────────┬─Offset_in_seconds─┬─Offset_in_hours─┐
│ 2021-04-21 10:20:30DateTime('America/New_York') │            -14400-4 │
└─────────────────────┴──────────────────────────────┴───────────────────┴─────────────────┘

1 rows in set. Elapsed: 0.047 sec.

 

--6.toYear 

--將日期或帶時間的日期轉換為包含年號 (AD) 的 UInt16 數字。

別名:YEAR

--7.toQuarter

--將日期或帶時間的日期轉換為包含季度數字的 UInt8 數字。

別名:QUARTER

--8.toMonth 

--將日期或帶時間的日期轉換為包含月份編號 (1-12) 的 UInt8 數字。

別名:MONTH

--9.toDayOfYear

--將日期或帶時間的日期轉換為 UInt16 數字,其中包含一年中的日期 (1-366)。

別名:DAYOFYEAR

--10.toDayOfMonth 

--將日期或帶時間的日期轉換為 UInt8 數字,其中包含月份中的天數 (1-31)。

別名:DAYOFMONTHDAY.

--11.toDayOfWeek 

--將日期或帶時間的日期轉換為包含星期幾的 UInt8 數字(星期一為 1,星期日為 7)。

別名:DAYOFWEEK

--12.toHour

--將帶時間的日期轉換為包含 24 小時制小時數 (0-23) 的 UInt8 數字。這個函數假設如果時鍾向前移動一小時,發生在凌晨 2 點,如果時鍾向后移動,它向前移動一小時,發生在凌晨 3 點(這並不總是正確的——即使在莫斯科在不同時間更改了兩次)。

別名:HOUR

--13.toMinute 

--將帶時間的日期轉換為 UInt8 數字,其中包含小時的分鍾數 (0-59)。

別名:MINUTE

--14.toSecon 

--將帶時間的日期轉換為 UInt8 數字,其中包含分鍾中的秒數 (0-59)。不考慮閏秒。

別名:SECOND

例子

SELECT
    toYear(now()),
    toQuarter(now()),
    toMonth(now()),
    toDayOfYear(now()),
    toDayOfMonth(now()),
    toDayOfWeek(now()),
    toHour(now()),
    toMinute(now()),
    toSecond(now())

Query id: 63a6217f-c652-4177-9534-6a5e6f497ef1

┌─toYear(now())─┬─toQuarter(now())─┬─toMonth(now())─┬─toDayOfYear(now())─┬─toDayOfMonth(now())─┬─toDayOfWeek(now())─┬─toHour(now())─┬─toMinute(now())─┬─toSecond(now())─┐
│          2022136123142127 │
└───────────────┴──────────────────┴────────────────┴────────────────────┴─────────────────────┴────────────────────┴───────────────┴─────────────────┴─────────────────┘

1 rows in set. Elapsed: 0.002 sec. 

 

--15.toUnixTimestamp

對於 DateTime 參數:將值轉換為 UInt32 類型的數字 - Unix 時間戳 ( https://en.wikipedia.org/wiki/Unix_time )。對於String參數:根據時區(可選第二個參數,默認使用服務器時區)將輸入字符串轉換為日期時間,並返回對應的unix時間戳。

句法

toUnixTimestamp(datetime)
toUnixTimestamp(str, [timezone])

返回值

  • 返回 unix 時間戳。

類型:UInt32.

例子

SELECT toUnixTimestamp('2017-11-05 08:07:47', 'Asia/Tokyo') AS unix_timestamp

Query id: 97c8b2f9-9a31-4808-b336-2b306f5b690b

┌─unix_timestamp─┐
│     1509836867 │
└────────────────┘

1 rows in set. Elapsed: 0.017 sec. 

 

!!!注意 “注意”toStartOf*下面描述的返回類型函數是DateDateTime。盡管這些函數可以DateTime64作為參數,但傳遞一個DateTime64超出正常范圍(1925 年 - 2283 年)的參數將給出不正確的結果。

--16.toStartOfYear 

--將日期或帶時間的日期向下舍入到一年的第一天。返回日期。

--17.toStartOfISOYear 

--將日期或帶時間的日期向下舍入到 ISO 年的第一天。返回日期。

--18.toStartOfQuarter 

--將日期或帶時間的日期向下舍入到季度的第一天。季度的第一天是 1 月 1 日、4 月 1 日、7 月 1 日或 10 月 1 日。返回日期。

--19.toStartOfMonth 

-將日期或帶時間的日期向下舍入到該月的第一天。返回日期。

!!!注意 “注意” 解析錯誤日期的行為是特定於實現的。ClickHouse 可能會返回零日期、拋出異常或“自然”溢出。

--20.toMonday

--將日期或帶時間的日期向下舍入到最近的星期一。返回日期。

--21.toStartOfWeek (t [, mode]) 

--按模式將日期或帶時間的日期向下舍入到最近的星期日或星期一。返回日期。mode 參數的工作方式與 toWeek() 的 mode 參數完全相同。對於單參數語法,使用模式值 0。

--22.toStartOfDay

--將日期與時間向下舍入到一天的開始。

--23.toStartOfHour 

--將日期與時間向下舍入到小時的開始。

--24.toStartOfMinute

--將日期與時間向下舍入到分鍾的開始。

例子

SELECT
    toStartOfYear(now()),
    toStartOfISOYear(now()),
    toStartOfQuarter(now()),
    toStartOfMonth(now()),
    toMonday(now()),
    toStartOfWeek(now()),
    toStartOfDay(now()),
    toStartOfHour(now()),
    toStartOfMinute(now())

Query id: 35773701-1293-4e4b-b18e-e9527f548151

┌─toStartOfYear(now())─┬─toStartOfISOYear(now())─┬─toStartOfQuarter(now())─┬─toStartOfMonth(now())─┬─toMonday(now())─┬─toStartOfWeek(now())─┬─toStartOfDay(now())─┬─toStartOfHour(now())─┬─toStartOfMinute(now())─┐
│           2022-01-012022-01-032022-01-012022-03-012022-02-282022-02-272022-03-02 00:00:002022-03-02 14:00:002022-03-02 14:42:00 │
└──────────────────────┴─────────────────────────┴─────────────────────────┴───────────────────────┴─────────────────┴──────────────────────┴─────────────────────┴──────────────────────┴────────────────────────┘

1 rows in set. Elapsed: 0.003 sec.

 

--25.toStartOfSecond 

截斷亞秒。

句法

toStartOfSecond(value, [timezone])

論據

  • value- 日期和時間。日期時間64
  • timezone返回值的時區(可選)。如果未指定,則函數使用value參數的時區。字符串

返回值

  • 輸入值沒有秒。

類型:DateTime64

例子

--無時區
WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64
SELECT toStartOfSecond(dt64)

Query id: bec9da7f-97d8-476e-a658-387e73e3199a

┌───toStartOfSecond(dt64)─┐
│ 2020-01-01 10:20:30.000 │
└─────────────────────────┘

1 rows in set. Elapsed: 0.003 sec. 
--有時區
WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64
SELECT toStartOfSecond(dt64, 'Europe/Moscow')

Query id: 505de849-4a1f-4000-b957-0eaf78e11430

┌─toStartOfSecond(dt64, 'Europe/Moscow')─┐
│                2020-01-01 05:20:30.000 │
└────────────────────────────────────────┘

1 rows in set. Elapsed: 0.032 sec. 

 

也可以看看

  • 時區服務器配置參數。

--26.toStartOfFiveMinute 

--將日期與時間向下舍入到五分鍾間隔的開始。

--27.toStartOfTenMinutes

--將日期與時間向下舍入到十分鍾間隔的開始。

--28.toStartOfFifteenMinutes

--將日期與時間向下舍入到十五分鍾間隔的開始。

--29.toStartOfInterval(time_or_data, INTERVAL x unit [, time_zone]) 

--這是其他名為 的函數的概括toStartOf*例如, toStartOfInterval(t, INTERVAL 1 year)返回相同toStartOfYear(t), toStartOfInterval(t, INTERVAL 1 month)返回相同toStartOfMonth(t), toStartOfInterval(t, INTERVAL 1 day)返回相同toStartOfDay(t), toStartOfInterval(t, INTERVAL 15 minute)返回相同toStartOfFifteenMinutes(t)等。

--30.toTime

--將帶時間的日期轉換為某個固定日期,同時保留時間。

--31.toRelativeYearNum

--從過去的某個固定點開始,將帶有時間或日期的日期轉換為年數。

--32.toRelativeQuarterNum 

--從過去的某個固定點開始,將帶有時間或日期的日期轉換為季度數。

--33.toRelativeMonthNum

--從過去的某個固定點開始,將帶有時間或日期的日期轉換為月份數。

--34.toRelativeWeekNum 

--從過去的某個固定點開始,將帶有時間或日期的日期轉換為周數。

--35.toRelativeDayNum

--從過去的某個固定點開始,將帶有時間或日期的日期轉換為天數。

--36.toRelativeHourNum 

--從過去的某個固定點開始,將帶有時間或日期的日期轉換為小時數。

--37.toRelativeMinuteNum 

--從過去的某個固定點開始,將帶有時間或日期的日期轉換為分鍾數。

--38.toRelativeSecondNum 

--從過去的某個固定點開始,將帶有時間或日期的日期轉換為秒數。

--39.toISOYear 

--將日期或帶時間的日期轉換為包含 ISO 年份編號的 UInt16 數字。

--40.toISOWeek

--將日期或帶時間的日期轉換為包含 ISO 周數的 UInt8 數字。

例子

SELECT
    toStartOfFiveMinute(now()),
    toStartOfTenMinutes(now()),
    toStartOfFifteenMinutes(now()),
    toStartOfInterval(now(), toIntervalMonth(1)),
    toTime(now()),
    toRelativeYearNum(now()),
    toRelativeQuarterNum(now()),
    toRelativeMonthNum(now()),
    toRelativeWeekNum(now()),
    toRelativeDayNum(now()),
    toRelativeHourNum(now()),
    toRelativeMinuteNum(now()),
    toRelativeSecondNum(now()),
    toISOYear(now()),
    toISOWeek(now())

Query id: e2ca5333-1a7f-4add-8c6d-940498d2d822

┌─toStartOfFiveMinute(now())─┬─toStartOfTenMinutes(now())─┬─toStartOfFifteenMinutes(now())─┬─toStartOfInterval(now(), toIntervalMonth(1))─┬───────toTime(now())─┬─toRelativeYearNum(now())─┬─toRelativeQuarterNum(now())─┬─toRelativeMonthNum(now())─┬─toRelativeWeekNum(now())─┬─toRelativeDayNum(now())─┬─toRelativeHourNum(now())─┬─toRelativeMinuteNum(now())─┬─toRelativeSecondNum(now())─┬─toISOYear(now())─┬─toISOWeek(now())─┐
│        2022-03-02 14:50:002022-03-02 14:50:002022-03-02 14:45:002022-03-011970-01-02 14:53:11202280882426727221905345727827436733164620399120229 │
└────────────────────────────┴────────────────────────────┴────────────────────────────────┴──────────────────────────────────────────────┴─────────────────────┴──────────────────────────┴─────────────────────────────┴───────────────────────────┴──────────────────────────┴─────────────────────────┴──────────────────────────┴────────────────────────────┴────────────────────────────┴──────────────────┴──────────────────┘

1 rows in set. Elapsed: 0.005 sec. 

 

--41.toWeek(date[,mode]) 

--此函數返回日期或日期時間的周數。toWeek() 的雙參數形式使您可以指定星期是從星期日還是星期一開始,以及返回值是否應在 0 到 53 或 1 到 53 的范圍內。如果省略 mode 參數,則默認mode 為 0。 toISOWeek()是一個兼容函數,相當於toWeek(date,3)下表描述了 mode 參數的工作方式。

模式 一周的第一天 范圍 第 1 周是第一周……
0 星期日 0-53 今年有一個星期天
1 周一 0-53 今年有 4 天或更多天
2 星期日 1-53 今年有一個星期天
3 周一 1-53 今年有 4 天或更多天
4 星期日 0-53 今年有 4 天或更多天
5 周一 0-53 今年有個星期一
6 星期日 1-53 今年有 4 天或更多天
7 周一 1-53 今年有個星期一
8 星期日 1-53 包含 1 月 1 日
9 周一 1-53 包含 1 月 1 日

對於含義為“今年有 4 天或更多天”的眾數值,周數根據 ISO 8601:1988 進行編號:

  • 如果包含 1 月 1 日的那一周在新年中有 4 天或更多天,則為第 1 周。

  • 否則為上一年的最后一周,下周為第 1 周。

對於具有“包含 1 月 1 日”含義的眾數值,包含 1 月 1 日的周是第 1 周。該周包含的新年中的天數無關緊要,即使它僅包含一天。

toWeek(date, [, mode][, Timezone])

論據

  • date– 日期或日期時間。
  • mode– 可選參數,取值范圍為 [0,9],默認為 0。
  • Timezone– 可選參數,它的行為類似於任何其他轉換函數。

例子

SELECT
    toDate('2016-12-27') AS date,
    toWeek(date) AS week0,
    toWeek(date, 1) AS week1,
    toWeek(date, 9) AS week9

Query id: b3d4b1e2-f7ff-4356-988b-a9cd07a0fc91

┌───────date─┬─week0─┬─week1─┬─week9─┐
│ 2016-12-2752521 │
└────────────┴───────┴───────┴───────┘

1 rows in set. Elapsed: 0.002 sec.

 

--42.toYearWeek(date[,mode])

--返回日期的年和周。結果中的年份可能與一年中第一周和最后一周的日期參數中的年份不同。

mode 參數的工作方式與 toWeek() 的 mode 參數完全相同。對於單參數語法,使用模式值 0。

toISOYear()是一個與 等價的兼容函數intDiv(toYearWeek(date,3),100)

例子

SELECT
    toDate('2016-12-27') AS date,
    toYearWeek(date) AS yearWeek0,
    toYearWeek(date, 1) AS yearWeek1,
    toYearWeek(date, 9) AS yearWeek9

Query id: 78e61ac3-0b9f-4699-8aa4-c76e570de807

┌───────date─┬─yearWeek0─┬─yearWeek1─┬─yearWeek9─┐
│ 2016-12-27201652201652201701 │
└────────────┴───────────┴───────────┴───────────┘

1 rows in set. Elapsed: 0.002 sec. 

 

--43.date_trunc

--將日期和時間數據截斷為日期的指定部分。

句法

date_trunc(unit, value[, timezone])

別名:dateTrunc

論據

  • unit— 截斷結果的間隔類型。字符串字面量可能的值:

    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year
  • value- 日期和時間。DateTimeDateTime64

  • timezone返回值的時區名稱(可選)。如果未指定,則函數使用value參數的時區。字符串

返回值

  • 值,截斷為日期的指定部分。

類型:日期時間

例子

--無時區
 SELECT now(), date_trunc('hour', now());

SELECT
    now(),
    date_trunc('hour', now())

Query id: 85829c41-caeb-44ef-b89a-77c7c603f22a

┌───────────────now()─┬─date_trunc('hour', now())─┐
│ 2022-03-02 15:02:382022-03-02 15:00:00 │
└─────────────────────┴───────────────────────────┘

1 rows in set. Elapsed: 0.002 sec. 
--有時區
SELECT
    now(),
    date_trunc('hour', now(), 'Europe/Moscow')

Query id: ba172c9c-b0a7-4a52-ad83-802905aca615

┌───────────────now()─┬─date_trunc('hour', now(), 'Europe/Moscow')─┐
│ 2022-03-02 15:03:052022-03-02 10:00:00 │
└─────────────────────┴────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec.

也可以看看

  • toStartOfInterval

--44.date_add

--將時間間隔或日期間隔添加到提供的日期或帶時間的日期。

句法

date_add(unit, value, date)

別名:dateAddDATE_ADD.

論據

  • unit— 要添加的間隔類型。字符串可能的值:

    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year
  • value— 要添加的間隔值。詮釋

  • date— 添加時間的日期或日期value日期日期時間。

返回值

日期或日期與時間相加,value表示

類型:日期日期時間。

例子

SELECT toDate('2018-01-01') + toIntervalYear(3)

Query id: fe21267f-63cc-431e-9621-1d6acea638a8

┌─plus(toDate('2018-01-01'), toIntervalYear(3))─┐
│                                    2021-01-01 │
└───────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec.

 

--45.date_diff

--返回兩個日期或具有時間值的日期之間的差異。

句法

date_diff('unit', startdate, enddate, [timezone])

別名:dateDiffDATE_DIFF.

論據

  • unit— 結果的間隔類型。字符串可能的值:

    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year
  • startdate— 要減去的第一個時間值(減數)。日期日期時間。

  • enddate— 要減去的第二個時間值(被減數)。日期日期時間。

  • timezone時區名稱(可選)。如果指定,它將同時應用於startdateenddate如果未指定,則使用startdate和的時區enddate如果它們不相同,則結果未指定。字符串

返回值

enddatestartdate之間的間隔值以 表示unit

類型:整數

例子

SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00'))

Query id: 0e2eb852-4e64-4115-9091-a99f0f72eb7c

┌─dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00'))─┐
│                                                                                     25 │
└────────────────────────────────────────────────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec. 

 

--46.date_sub

--從提供的日期或帶時間的日期中減去時間間隔或日期間隔。

句法

date_sub(unit, value, date)

別名:dateSubDATE_SUB.

論據

  • unit— 要減去的區間類型。字符串可能的值:

    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year
  • value— 要減去的區間值。詮釋

  • datevalue—減去時間的日期或日期。日期日期時間。

返回值

通過從中減去value以 表示的日期或帶時間的日期

類型:日期日期時間。

例子

SELECT toDate('2018-01-01') - toIntervalYear(3)

Query id: 95f59a3d-769e-4411-95f7-d66073c09c1f

┌─minus(toDate('2018-01-01'), toIntervalYear(3))─┐
│                                     2015-01-01 │
└────────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec. 

 

--47.timestamp_add

--將指定的時間值與提供的日期或日期時間值相加。

句法

timestamp_add(date, INTERVAL value unit)

別名:timeStampAddTIMESTAMP_ADD.

論據

  • date— 日期或日期與時間。日期日期時間。

  • value— 要添加的間隔值。詮釋

  • unit— 要添加的間隔類型。字符串可能的值:

    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year

返回值

日期或日期與時間與指定value表示在unit添加到date

類型:日期日期時間。

例子

SELECT toDate('2018-01-01') + toIntervalMonth(3)

Query id: f63f52d4-518a-467d-b816-d140cf297a43

┌─plus(toDate('2018-01-01'), toIntervalMonth(3))─┐
│                                     2018-04-01 │
└────────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec. 

 

--48.timestamp_sub 

--從提供的日期或帶時間的日期中減去時間間隔。

句法

timestamp_sub(unit, value, date)

別名:timeStampSubTIMESTAMP_SUB.

論據

  • unit— 要減去的區間類型。字符串可能的值:

    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year
  • value— 要減去的區間值。詮釋

  • date— 日期或日期與時間。日期日期時間。

返回值

通過從中減去value以 表示的日期或帶時間的日期

類型:日期日期時間。

例子

SELECT toDateTime('2018-12-18 01:02:03') - toIntervalMonth(5)

Query id: 1a306988-c92d-440b-a022-cdcb28bebc3b

┌─minus(toDateTime('2018-12-18 01:02:03'), toIntervalMonth(5))─┐
│                                          2018-07-18 01:02:03 │
└──────────────────────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.003 sec.

 

--49.now

--返回當前日期和時間。

句法

now([timezone])

論據

  • timezone返回值的時區名稱(可選)。字符串

返回值

  • 當前日期和時間。

類型:日期時間

例子

--無時區
SELECT now()

Query id: 544bd46f-e17c-49b9-9a76-ba20b9bf93cb

┌───────────────now()─┐
│ 2022-03-02 15:14:11 │
└─────────────────────┘

1 rows in set. Elapsed: 0.002 sec. 

--有時區

SELECT now('Europe/Moscow')

Query id: 4749552b-81f5-4e75-bc4a-8a8ed2ad06fa

┌─now('Europe/Moscow')─┐
│  2022-03-02 10:14:19 │
└──────────────────────┘

1 rows in set. Elapsed: 0.002 sec.

 

--50.today 

--接受零參數並返回請求執行時刻之一的當前日期。與 'toDate(now())' 相同。

--51.yesterday

--接受零參數並在請求執行的某一時刻返回昨天的日期。與“今天() - 1”相同。

--52.timeSlot

--將時間四舍五入到半小時。此功能是 Yandex.Metrica 特有的,因為如果跟蹤標簽顯示單個用戶的連續瀏覽量在時間上的差異嚴格超過此量,則半小時是將會話分成兩個會話的最短時間。這意味着元組(標簽 ID、用戶 ID 和時間段)可用於搜索包含在相應會話中的綜合瀏覽量。

--53.toYYYYMM

--將日期或帶時間的日期轉換為包含年月號 (YYYY * 100 + MM) 的 UInt32 數字。

--54.toYYYYMMDD 

--將日期或帶時間的日期轉換為包含年月號 (YYYY * 10000 + MM * 100 + DD) 的 UInt32 數字。

--55.toYYYYMMDDhhmmss 

--將日期或帶時間的日期轉換為包含年月號的 UInt64 數字 (YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss)。

例子

SELECT
    today(),
    yesterday(),
    timeSlot(now()),
    toYYYYMM(now()),
    toYYYYMMDD(now()),
    toYYYYMMDDhhmmss(now())

Query id: b663817b-c8f7-4998-b304-ed17ae4a2c22

┌────today()─┬─yesterday()─┬─────timeSlot(now())─┬─toYYYYMM(now())─┬─toYYYYMMDD(now())─┬─toYYYYMMDDhhmmss(now())─┐
│ 2022-03-022022-03-012022-03-02 15:00:002022032022030220220302151846 │
└────────────┴─────────────┴─────────────────────┴─────────────────┴───────────────────┴─────────────────────────┘

1 rows in set. Elapsed: 0.003 sec. 

 

--56.addYears, addMonths, addWeeks, addDays, addHours, addMinutes, addSeconds, addQuarters 

--函數將日期/日期時間間隔添加到日期/日期時間,然后返回日期/日期時間。例如:

WITH
    toDate('2018-01-01') AS date,
    toDateTime('2018-01-01 00:00:00') AS date_time
SELECT
    addYears(date, 1) AS add_years_with_date,
    addYears(date_time, 1) AS add_years_with_date_time

Query id: 3fb2e0af-ab17-47a1-ba93-cb6682d67879

┌─add_years_with_date─┬─add_years_with_date_time─┐
│          2019-01-012019-01-01 00:00:00 │
└─────────────────────┴──────────────────────────┘

1 rows in set. Elapsed: 0.002 sec.

 

--57.subtractYears,subtractMonths,subtractWeeks,subtractDays,subtractHours,subtractMinutes,subtractSeconds,subtractQuarters 

--函數將日期/日期時間間隔減去日期/日期時間,然后返回日期/日期時間。例如:

WITH
    toDate('2019-01-01') AS date,
    toDateTime('2019-01-01 00:00:00') AS date_time
SELECT
    subtractYears(date, 1) AS subtract_years_with_date,
    subtractYears(date_time, 1) AS subtract_years_with_date_time

Query id: b9ab8a6c-abf2-40b9-b05f-32c89c9144cc

┌─subtract_years_with_date─┬─subtract_years_with_date_time─┐
│               2018-01-012018-01-01 00:00:00 │
└──────────────────────────┴───────────────────────────────┘

1 rows in set. Elapsed: 0.004 sec.

 

--58.timeSlots(StartTime, Duration,[, Size]) {#timeslotsstarttime-duration-size}

--對於從“StartTime”開始並持續“Duration”秒的時間間隔,它會及時返回一個時刻數組,包括從該間隔向下舍入到“Size”(以秒為單位)的點。'Size' 是一個可選參數:一個常量 UInt32,默認設置為 1800。例如,timeSlots(toDateTime('2012-01-01 12:20:00'), 600) = [toDateTime('2012-01-01 12:00:00'), toDateTime('2012-01-01 12:30:00')]這是在相應會話中搜索綜合瀏覽量所必需的。

--59.formatDateTime

--根據給定的格式字符串格式化時間。Format 是一個常量表達式,因此單個結果列不能有多種格式。

句法

formatDateTime(Time, Format\[, Timezone\])

返回值

根據確定的格式返回時間和日期值。

替換字段 使用替換字段,您可以為結果字符串定義模式。“示例”列顯示2018-01-02 22:33:44.

占位符 描述 例子
%C 年份除以 100 並截斷為整數 (00-99) 20
%d 一個月中的某一天,零填充 (01-31) 02
%D 短 MM/DD/YY 日期,相當於 %m/%d/%y 01/02/18
%e 日期,空格填充 (1-31)   2
%F 短 YYYY-MM-DD 日期,相當於 %Y-%m-%d 2018-01-02
%G ISO 周數的四位數年份格式,根據ISO 8601標准定義的基於周的年份計算,通常僅與 %V 一起使用 2018
%g 兩位數年份格式,與 ISO 8601 一致,由四位數字表示法縮寫 18
%H 24 小時制小時 (00-23) 22
%I 12 小時制小時 (01-12) 10
%j 一年中的某一天 (001-366) 002
%m 以十進制數表示的月份 (01-12) 01
%M 分鍾 (00-59) 33
%n 換行符 ('')  
%p AM 或 PM 指定 下午
%Q 季度(1-4) 1
%R 24 小時 HH:MM 時間,相當於 %H:%M 22:33
%S 秒(00-59) 44
%t 水平制表符 (')  
%T ISO 8601 時間格式 (HH:MM:SS),相當於 %H:%M:%S 22:33:44
%u ISO 8601 工作日為數字,星期一為 1 (1-7) 2
%V ISO 8601 周數 (01-53) 01
%w 工作日為十進制數,星期日為 0 (0-6) 2
%y 年份,最后兩位數 (00-99) 18
%Y 2018
%% 展示% %

例子

SELECT formatDateTime(toDate('2010-01-04'), '%g')

Query id: 6db79d41-84a3-41b5-afbc-3f2459902942

┌─formatDateTime(toDate('2010-01-04'), '%g')─┐
│ 10                                         │
└────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec.

 

--60.dateName

--返回日期的指定部分。

句法

dateName(date_part, date)

論據

  • date_part— 日期部分。可能的值:“年”、“季度”、“月”、“周”、“年日”、“日”、“工作日”、“小時”、“分鍾”、“秒”。字符串
  • date- 日期。日期日期時間或日期時間64 。
  • timezone- 時區。可選的。字符串

返回值

  • 日期的指定部分。

類型:字符串

例子

WITH toDateTime('2021-04-14 11:22:33') AS date_value
SELECT
    dateName('year', date_value),
    dateName('month', date_value),
    dateName('day', date_value)

Query id: 6e38335d-ec94-42f0-9843-65a0b3d217e1

┌─dateName('year', date_value)─┬─dateName('month', date_value)─┬─dateName('day', date_value)─┐
│ 2021                         │ April                         │ 14                          │
└──────────────────────────────┴───────────────────────────────┴─────────────────────────────┘

1 rows in set. Elapsed: 0.003 sec. 

 

--61.FROM_UNIXTIME 

--函數將 Unix 時間戳轉換為日歷日期和一天中的時間。當只有一個Integer類型的參數時,它的作用與toDateTime相同,並返回DateTime類型。

例子:

SELECT FROM_UNIXTIME(423543535)

Query id: 10cb2462-dbc8-4fbd-86b7-c0644b17b620

┌─FROM_UNIXTIME(423543535)─┐
│      1983-06-04 10:58:55 │
└──────────────────────────┘

1 rows in set. Elapsed: 0.002 sec. 

 

當有兩個參數時:第一個是IntegerDateTime ,第二個是常量格式字符串——它的作用與formatDateTime相同,並返回String類型。

例如:

SELECT FROM_UNIXTIME(1234334543, '%Y-%m-%d %R:%S') AS DateTime

Query id: b25376da-aabb-42d6-b995-4235e4912d8c

┌─DateTime────────────┐
│ 2009-02-11 14:42:23 │
└─────────────────────┘

1 rows in set. Elapsed: 0.002 sec. 

 

--62.toModifiedJulianDay 

--將文本形式的Proleptic 公歷YYYY-MM-DD日期轉換為 Int32中的修改后的儒略日數字。此功能支持日期從0000-01-019999-12-31如果無法將參數解析為日期或日期無效,則會引發異常。

句法

toModifiedJulianDay(date)

論據

  • date— 文本形式的日期。字符串固定字符串。

返回值

  • 修改儒略日數。

類型:Int32

例子

SELECT toModifiedJulianDay('2020-01-01')

Query id: a5f72f60-b7be-438e-9bdb-cd758bef3d27

┌─toModifiedJulianDay('2020-01-01')─┐
│                             58849 │
└───────────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec.

 

--63.toModifiedJulianDayOrNull 

--類似於toModifiedJulianDay(),但它不是引發異常而是返回NULL

句法

toModifiedJulianDayOrNull(date)

論據

  • date— 文本形式的日期。字符串固定字符串。

返回值

  • 修改儒略日數。

類型:可空(Int32)

例子

SELECT toModifiedJulianDayOrNull('2020-01-01')

Query id: 9e6dc247-cbf9-49ed-ba76-4b2726cfb14c

┌─toModifiedJulianDayOrNull('2020-01-01')─┐
│                                   58849 │
└─────────────────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec. 

 

--64.fromModifiedJulianDay 

--將修改后的儒略日數字轉換為文本形式的Proleptic 公歷YYYY-MM-DD日期。此函數支持從-678941到的日期編號2973119(分別代表 0000-01-01 和 9999-12-31)。如果天數超出支持范圍,則會引發異常。

句法

fromModifiedJulianDay(day)

論據

  • day— 修改儒略日數。任何整數類型

返回值

  • 文本形式的日期。

類型:字符串

例子

SELECT fromModifiedJulianDay(58849)

Query id: c53ef32a-7d21-4342-abd1-9afff3872f72

┌─fromModifiedJulianDay(58849)─┐
│ 2020-01-01                   │
└──────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec.

 

--65.fromModifiedJulianDayOrNull {#frommodifiedjuliandayornull}

--類似於fromModifiedJulianDayOrNull(),但它不會引發異常,而是返回NULL

句法

fromModifiedJulianDayOrNull(day)

論據

  • day— 修改儒略日數。任何整數類型

返回值

  • 文本形式的日期。

類型:可空(字符串)

例子

SELECT fromModifiedJulianDayOrNull(58849)

Query id: fedf7263-4779-47b7-8b8d-25097afd36ac

┌─fromModifiedJulianDayOrNull(58849)─┐
│ 2020-01-01                         │
└────────────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec. 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM