12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /* syntax version 1 */
- $format = DateTime::Format("%Y-%m-%d %H:%M:%S %Z");
- select
- $format(DateTime::EndOfMonth(TzDateTime('2023-07-07T01:02:03,Europe/Moscow'))),
- $format(DateTime::EndOfMonth(Date('2023-08-08'))),
- $format(DateTime::EndOfMonth(Date('2023-09-09'))),
- $format(DateTime::EndOfMonth(Date('2023-02-02'))),
- $format(DateTime::EndOfMonth(Date('2024-02-02')))
- into result `Normal cases`;
- $tsMin = '1970-01-01T00:00:00.000000';
- $tsMax = '2105-12-31T23:59:59.999999';
- $tsBelow = '1969-12-31T23:59:59.999999';
- $tsAbove = '2106-01-01T00:00:00.000000';
- select $format(cast($tsMin || 'Z' as Timestamp))
- , $format(DateTime::EndOfMonth(cast($tsMin || 'Z' as Timestamp)))
- , $format(DateTime::EndOfMonth(cast($tsMin || ',Atlantic/Madeira' as Timestamp)))
- into result `Minimal timestamp value`;
- select $format(cast($tsMax || 'Z' as Timestamp))
- , $format(DateTime::EndOfMonth(cast($tsMax || 'Z' as Timestamp)))
- , $format(DateTime::EndOfMonth(cast('2105-12-12T00:00:00Z' as Timestamp)))
- , $format(DateTime::EndOfMonth(cast($tsMax || ',Atlantic/Azores' as Timestamp)))
- into result `Maximum timestamp value`;
- select $format(cast($tsBelow || ',Atlantic/Azores' as TzTimestamp))
- , $format(DateTime::EndOfMonth(cast($tsBelow || ',Atlantic/Azores' as TzTimestamp)))
- into result `Timestamp below minimum`;
- select $format(cast($tsAbove || ',Atlantic/Madeira' as TzTimestamp))
- , $format(DateTime::EndOfMonth(cast($tsAbove || ',Atlantic/Madeira' as TzTimestamp)))
- into result `Timestamp above maximum`;
- $check = ($arg) -> {
- return <|
- soyear: DateTime::EndOfYear($arg),
- soquarter: DateTime::EndOfQuarter($arg),
- somonth: DateTime::EndOfMonth($arg),
- soweek: DateTime::EndOfWeek($arg),
- soday: DateTime::EndOfDay($arg),
- sopt13h: DateTime::EndOf($arg, Interval("PT13H")),
- sopt4h: DateTime::EndOf($arg, Interval("PT4H")),
- sopt15m: DateTime::EndOf($arg, Interval("PT15M")),
- sopt20s: DateTime::EndOf($arg, Interval("PT20S")),
- sopt7s: DateTime::EndOf($arg, Interval("PT7S")),
- |>
- };
- $typeDispatcher = ($row) -> {
- $tm = $row.tm;
- return <|
- explicit: $check(DateTime::Split($tm)),
- implicit: $check($tm),
- |>;
- };
- $input = SELECT CAST(ftztimestamp as TzTimestamp) as tm FROM Input;
- PROCESS $input USING $typeDispatcher(TableRow()) into result `Other cases`;
|