All Products
Search
Document Center

Hologres:Date and time functions

Last Updated:Nov 05, 2025

This topic describes the date and time functions that are supported by Hologres and provides examples on how to use the functions.

Type

Function

Features

Data type conversion functions

MAKE_DATE

Creates a date that consists of the year, month, and day. By default, only date and time values that describe time points in a year from 1925 to 2282 are supported.

TO_CHAR

Converts a timestamp, an integer, a real number, or a double-precision number into a string.

TO_DATE

Converts a string into a date. By default, only strings that describe dates in a year from 1925 to 2282 can be converted.

TO_TIMESTAMP

Converts a string into a timestamp or a timestamp into a date.

Functions and operators for basic operations on date and time values

ADD_MONTHS

Adds a specific number of months to a specified date. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

DATEADD

Adds or subtracts an interval to or from a specified date and time value based on a specified time unit. By default, only date and time values that describe time points in a year from 1925 to 2282 are supported.

DATEDIFF

Calculates the difference between two dates or timestamps. By default, only date and time values that describe time points in a year from 1925 to 2282 are supported.

MONTHS_BETWEEN

Returns the number of months between two dates. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

NEXT_DAY

Returns the date of the first specified day of a week after a specified date. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

Date or time addition: the operator +

Adds days or time.

Date or time subtraction: the operator -

Subtracts days or time.

Date or time multiplication: the operator *

Multiplies days or time.

Date or time division: the operator /

Divides days or time.

Date and time truncation functions

DATE_PART

Extracts a specific part, such as the year, month, day, or hour part, from a timestamp. This function is equivalent to the EXTRACT function.

DATE_TRUNC

Truncates date and time data to a specified time unit.

EXTRACT

Extracts a specific part, such as the year, month, day, or hour part, from a timestamp.

LAST_DAY

Returns the last day of the month in which a date value falls. By default, only date and time values that describe time points in a year from 1925 to 2282 are supported.

ORACLE_LAST_DAY

Returns the last day of the month in which a date value falls. By default, only date and time values that describe time points in a year from 1925 to 2282 are supported. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

ROUND

Rounds a date to the nearest value based on a time unit. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

TRUNC

Truncates a date or timestamp to a specified time unit. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

Current date and time acquisition functions

CLOCK_TIMESTAMP

Returns the current date and time.

CURRENT_DATE

Returns the current date.

CURRENT_TIMESTAMP

Returns the start time of the current transaction. This function is equivalent to the TRANSACTION_TIMESTAMP or NOW function.

LOCALTIMESTAMP

Returns the current time that does not contain the time zone information.

NOW

Returns the start time of the current transaction. This function is equivalent to the TRANSACTION_TIMESTAMP or CURRENT_TIMESTAMP function.

STATEMENT_TIMESTAMP

Returns the start time of the current statement.

TIMEOFDAY

Returns the current date and time. This function is similar to the CLOCK_TIMESTAMP function. The value returned by the TIMEOFDAY function is a formatted text string.

TRANSACTION_TIMESTAMP

Returns the start time of the current transaction. This function is equivalent to the CURRENT_TIMESTAMP or NOW function.

Others

ISFINITE

Checks whether a date of the DATE type is a finite number.

Date and time conversion functions

TO_CHAR

  • Description:

    • Converts a timestamp into a string. By default, only timestamps that describe time points in a year from 1925 to 2282 can be converted.

      TO_CHAR(TIMESTAMP|TIMESTAMPTZ, TEXT)

      Usage notes:

      • You can use this function to convert timestamps into strings in the 24-hour clock or the 12-hour clock. HH24 indicates the 24-hour clock, and HH12 indicates the 12-hour clock. By default, the 12-hour clock is used.

      • YYYY corresponds to the year, MM to the month, DD to the day, HH to the hour, MI to the minute, and SS to the second.

      • Starting from Hologres V1.1.31, you can execute set hg_experimental_functions_use_pg_implementation = 'to_char'; or set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp'; before the SQL statement to support all time ranges.

        Note

        If you execute one of the preceding statements to configure the GUC parameter, the query performance degrades by about 50%. In Hologres V1.1.42 and later, the query performance degrades by about 20%.

    • Converts an integer into a string.

      TO_CHAR(INT, TEXT)
    • Converts a real number or a double-precision number into a string.

      TO_CHAR(DOUBLE PRECISION, TEXT)
  • Return value:

    A value of the TEXT type is returned.

  • Examples:

    • Convert a timestamp into a string in the 24-hour clock.

      -- Returned result: 13:48:30.
      SELECT TO_CHAR(current_timestamp, 'HH24:MI:SS');
      
      -- Returned result: 2024-08-05.
      SELECT TO_CHAR(current_timestamp, 'YYYY-MM-DD');
    • Convert a timestamp into a string in the 12-hour clock.

      -- Returned result: 01:50:42 PM.
      SELECT TO_CHAR(current_timestamp, 'HH12:MI:SS AM');
      
      -- Returned result: 12:30:00 AM.
      SELECT TO_CHAR(time '00:30:00', 'HH12:MI:SS AM');
    • Convert a timestamp value of a field into a string.

      CREATE TABLE time_test(
        a text,
        b TIMESTAMPTZ );
      INSERT INTO time_test VALUES ('2001-09-28 03:00:00','2004-10-19 10:23:54+08');
      
      -- Returned result: 10:23:54.
      SELECT TO_CHAR(b, 'HH24:MI:SS') FROM time_test;
      
      -- Convert a value of the TEXT type into a date. Returned result: 2001-09-28.
      SELECT TO_CHAR(to_timestamp(a, 'YYYY-MM-DD'),'YYYY-MM-DD')FROM time_test;
    • Convert a timestamp into a string in another time zone.

      CREATE TABLE timestamptz_test(
        a TIMESTAMPTZ);
      
      INSERT INTO timestamptz_test VALUES ('2023-03-21 10:23:54+02');
      • If no time zone is specified, the timestamp value of the a field is converted into a string that uses the UTC+8 time zone.

        -- Returned result: 2023-03-21 16:23:54.
        SELECT TO_CHAR(a, 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;
      • Convert the timestamp value of the a field into a string that uses the UTC-5 time zone.

        -- Returned result: 2023-03-21 04:23:54.
        SELECT TO_CHAR(a at time zone 'US/Eastern', 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;
    • Convert an integer into a string.

      -- Returned result: 125.
      SELECT TO_CHAR(125, '999');
    • Convert a double-precision number into a string.

      -- Returned result: 125.8.
      SELECT TO_CHAR(125.8::real, '999D9');

TO_DATE

  • Description: Converts a string into a date. By default, only strings that describe dates in a year from 1925 to 2282 can be converted.

    TO_DATE(<text_date> TEXT, <format_mask> TEXT)
  • Usage notes:

    Starting from Hologres V1.1.31, you can execute set hg_experimental_functions_use_pg_implementation = 'to_date'; or set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp'; before the SQL statement to support all time ranges.

    Note

    If you execute one of the preceding statements to configure the GUC parameter, the query performance degrades by about 50%. In Hologres V1.1.42 and later, the query performance degrades by about 20%.

  • Parameters:

    • text_date: required. The string that you want to convert.

    • format_mask: required. The date format.

  • Return value:

    A value of the TEXT type is returned.

  • Examples:

    • Convert a string into a date.

      -- Returned result: 2000-12-05.
      SELECT TO_DATE('05 Dec 2000', 'DD Mon YYYY');
      
      -- Returned result: 2001-03-24.
      SELECT TO_DATE('2001 03 24', 'YYYY-MM-DD');
    • Convert the value of a field of the TEXT data type into a date.

      CREATE TABLE time_test(a TEXT);
      INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
      SELECT TO_DATE(a, 'YYYY-MM-DD') FROM time_test;

      The following result is returned:

        to_date
      ------------
       2001-09-28

TO_TIMESTAMP

  • Description:

    • Converts a string into a timestamp. By default, only strings that describe time points in a year from 1925 to 2282 can be converted.

      TO_TIMESTAMP(<text_date> TEXT, <format_mask> TEXT)
      • Usage notes:

        • The return value contains +08.

        • Starting from Hologres V1.1.31, you can execute set hg_experimental_functions_use_pg_implementation = 'to_timestamp'; or set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp'; before the SQL statement to support all time ranges.

          Note

          If you execute one of the preceding statements to configure the GUC parameter, the query performance degrades by about 50%. In Hologres V1.1.42 and later, the query performance degrades by about 20%.

      • Parameters:

        • text_date: required. The string that you want to convert into a timestamp.

        • format_mask: required. The timestamp format.

    • Converts a timestamp into a date.

      TO_TIMESTAMP(DOUBLE PRECISION)
      Note

      The UNIX timestamp represents the number of seconds that have elapsed since 00:00:00, January 1, 1970.

  • Return value:

    A value of the TIMESTAMPTZ type is returned.

  • Examples:

    • Convert a string into a timestamp.

      SELECT TO_TIMESTAMP('05 Dec 2000', 'DD Mon YYYY');

      The following result is returned:

            to_timestamp
      ------------------------
       2000-12-05 00:00:00+08
    • Convert a string of the TEXT data type into a timestamp.

      CREATE TABLE time_test(a TEXT);
      INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
      SELECT TO_TIMESTAMP(a, 'YYYY-MM-DD') FROM time_test;

      The following result is returned:

            to_timestamp
      ------------------------
       2001-09-28 00:00:00+08
    • Convert a UNIX timestamp in seconds into a date.

      -- Returned result: 1975-03-06 03:38:16+08.
      SELECT TO_TIMESTAMP(163280296);
    • Convert a UNIX timestamp in milliseconds into a date.

      -- Returned result: 2021-09-28 12:22:41+08.
      SELECT TO_TIMESTAMP(1632802961000/1000);

MAKE_DATE

  • Description: Creates a date that consists of the year, month, and day. By default, only date and time values that describe time points in a year from 1925 to 2282 are supported.

    MAKE_DATE(<year> INT, <month> INT, <day> INT)
  • Usage notes:

    Hologres V2.0.29 and later support this function. This function does not support constants as input parameters.

  • Return value:

    A value of the DATE type is returned.

  • Example:

    -- Returned result: 2013-07-15.
    SELECT MAKE_DATE(2013, 7, 15);

    The following result is returned:

    make_date
    ------------
     2013-07-15

Functions and operators for basic operations on date and time values

DATEADD

  • Description: Adds or subtracts an interval to or from a specified date and time value based on a specified time unit. By default, only date and time values that describe time points in a year from 1925 to 2282 are supported.

    DATEADD(<d> DATE|TIMESTAMP|TIMESTAMPTZ, <num> BIGINT, <str> TEXT)
  • Usage notes:

    Hologres instances of the following versions support this function:

    • V2.0.31 to V2.1.0

    • V2.1.13 and later

    Note

    This function does not support constants as input parameters.

  • Parameters:

    • d: required. The original date and time value.

    • num: required. The interval that you want to add or subtract.

    • str: required. The specified time unit. Valid values: yyyy, year, mm, month, mon, dd, day, hh, hour, mi, and ss.

  • Return value:

    A value of the DATE, TIMESTAMP, or TIMESTAMPTZ type is returned.

  • Example:

    CREATE TABLE test_dateadd (a TIMESTAMP);
    INSERT INTO test_dateadd VALUES ('2005-02-28 00:00:00');
    
    -- Add one month to the specified date and time value.
    SELECT DATEADD(a , 1, 'mm') FROM test_dateadd;

    The following result is returned:

           dateadd
    ---------------------
     2005-03-28 00:00:00

ADD_MONTHS

  • Description: Adds a specific number of months to a specified date and time value. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

    ADD_MONTHS(<d> DATE, <month> INT)
  • Parameters:

    • d: required. The original date.

    • month: required. The integer that you want to add to the original date.

  • Return value:

    A value of the DATE type is returned.

  • Example:

    SELECT ADD_MONTHS(current_date, 2);

    The following result is returned:

     add_months
    ------------
     2024-10-05

DATEDIFF

  • Description: Calculates the difference between two dates or timestamps. By default, only date and time values that describe time points in a year from 1925 to 2282 are supported.

    DATEDIFF(<d1> DATE|TIMESTAMP|TIMESTAMPTZ, <d2> DATE|TIMESTAMP|TIMESTAMPTZ, <str> TEXT)
  • Usage notes:

    Hologres instances of the following versions support this function:

    • V2.0.31 to V2.1.0

    • V2.1.13 and later

    Note

    Input parameters of this function cannot be all constants.

  • Parameters:

    • d1: required. The first date or timestamp.

    • d2: required. The second date or timestamp.

    • str: required. The time unit based on which the time difference is calculated. Valid values: yyyy, year, mm, month, mon, dd, day, hh, hour, mi, and ss.

  • Return value:

    A value of the BIGINT type is returned. If the time difference in the specified time unit is less than 1, the value 0 is returned by default.

    For example, if you use this function to calculate the difference between 2023-12-31 and 2024-01-01 based on the time unit year, the value 0 is returned.

    Note

    If you want the function to return 1 in the preceding scenario, execute set hg_experimental_datediff_use_presto_impl = off; before the SQL statement to disable this GUC parameter.

  • Example:

    CREATE TABLE test_datediff (a TIMESTAMP);
    INSERT INTO test_datediff VALUES ('2005-02-28 00:00:00');
    
    -- Calculate the difference in minutes between two dates.
    SELECT DATEDIFF(a , '2005-03-02 00:00:00', 'mi') FROM test_datediff;

    The following result is returned:

     datediff
    ----------
        -2880

MONTHS_BETWEEN

  • Description: Returns the number of months between two dates. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

    MONTHS_BETWEEN(DATE, DATE)
  • Return value:

    A value of the INT type is returned.

  • Examples:

    • Example 1:

      -- Returned result: 2.
      SELECT MONTHS_BETWEEN('2022-01-01', '2021-11-01');
    • Example 2:

      -- Returned result: -2.
      SELECT MONTHS_BETWEEN('2021-11-01', '2022-01-01');

NEXT_DAY

  • Description: Returns the date of the first specified day of a week after a specified date. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

    NEXT_DAY(<d> DATE, <str> TEXT|INT)
  • Parameters:

    • d: required. The specified date.

    • str: required. A string that represents the day of a week. Example: Friday. This parameter can also be set to a number that represents the day of a week. The number ranges from 1 to 7. The value 1 indicates Sunday, and the value 2 indicates Monday. In a similar manner, the value 7 indicates Saturday.

  • Return value:

    A value of the DATE type is returned.

  • Examples:

    • Example 1:

      -- Returned result: 2022-05-06.
      SELECT NEXT_DAY('2022-05-01', 'FRIDAY');
    • Example 2:

      -- Returned result: 2022-05-06.
      SELECT NEXT_DAY('2022-05-01', 5);

Date and time addition: +

Return value type

Example

Returned result

DATE

Add seven days to a specified date.

SELECT date '2001-09-28' + integer '7';

2001-10-05

Add three days to the current date.

SELECT current_date+ integer '3 ';

2022-12-10

Add one day to the current time.

SELECT to_char(current_date+ interval '1 day','yyyy-mm-dd');

2022-12-09

TIMESTAMP

Add three hours to a specified date. The time starts from 00:00:00.

SELECT date '2001-09-28' + time '03:00';

2001-09-28 03:00:00

Add one hour to a specified date. The time starts from 00:00:00.

SELECT date '2001-09-28' + interval '1 hour';

2001-09-28 01:00:00

TIMESTAMPTZ

Add one day to the current time.

SELECT now()+interval '1 day';

2022-12-08 20:09:19.388465+08

Add one month to the current time.

SELECT now()+interval '1 month';

2023-01-08 20:21:50.993481+08

Add two years to the current time.

 SELECT now()+interval '2 year';

2024-12-08 20:22:49.416343+08

Date and time subtraction: -

Return value type

Example

Returned result

INTEGER

Subtract a specified date from another specified date.

SELECT date '2001-10-01' - date '2001-09-28';

3

DATE

Subtract seven days from a specified date.

SELECT date '2001-10-01' - integer '7';

2001-09-24

TIMESTAMP

Subtract three hours from a specified date.

SELECT date '2001-09-28' - time '03:00';

2001-09-27 21:00:00

Subtract one hour from a specified date.

 SELECT date '2001-09-28' - interval '1 hour';

2001-09-27 23:00:00

Subtract two days from the current time.

SELECT now()-interval '2 day';

2022-12-06 20:27:21.094258+08

Date and time multiplication: *

Return value type

Example

Returned result

INTERVAL

Time multiplier

SELECT 21 * interval '3 day';

0 years 0 mons 63 days 0 hours 0 mins 0.0 secs

Date and time division: /

Return value type

Example

Returned result

INTERVAL

Time division

SELECT interval '1 hour' / double precision '1.5';

0 years 0 mons 0 days 0 hours 40 mins 0.0 secs

Date and time truncation functions

LAST_DAY

  • Description: Returns the last day of the month in which a date value falls. By default, only date and time values that describe time points in a year from 1925 to 2282 are supported.

    LAST_DAY(DATE|TIMESTAMP|TIMESTAMPTZ)
  • Usage notes:

    Hologres instances of the following versions support this function:

    Note

    This function does not support constants as input parameters.

    • V2.0.31 to V2.1.0

    • V2.1.13 and later

  • Return value:

    A value of the DATE type is returned.

  • Example:

    Retrieve the last day of the month for 2004-02-28 00:00:00.

    CREATE TABLE test_last_day (a TIMESTAMP);
    INSERT INTO test_last_day VALUES ('2004-02-28 00:00:00');
    
    SELECT LAST_DAY(a) FROM test_last_day;

    The following result is returned:

      last_day
    ------------
     2004-02-29

ORACLE_LAST_DAY

  • Description: Returns the last day of the month in which a date value falls. By default, only date and time values that describe time points in a year from 1925 to 2282 are supported. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

    ORACLE_LAST_DAY(DATE)
  • Return value:

    A value of the DATE type is returned.

  • Example:

    SELECT ORACLE_LAST_DAY('2022-05-01');

    The following result is returned:

     oracle_last_day
    -----------------
     2022-05-31

EXTRACT

  • Description: Extracts a specific part, such as year, month, day, or hour, from a date and time expression (timestamp).

    EXTRACT(field FROM TIMESTAMP)
    Note

    The input constants of the field parameter include century, day, decade, dow (the day of the week, with Sunday being 0), isodow (the day of the week, with Sunday being 7), doy (the day of the year), epoch, hour, minute, month, quarter, second, week, and year.

  • Return value

    A value of the DOUBLE PRECISION type is returned.

  • Examples

    • Extract the hour part from a timestamp.

      -- Returned result: 20.
      SELECT EXTRACT(hour FROM timestamp '2001-02-16 20:38:40');
    • Extract the minute part from the current time.

      -- Returned result: 12.
      SELECT EXTRACT(minute FROM NOW());
    • Extract the number of seconds from 1970 to the time specified by the value of a field.

      CREATE TABLE time_test(a TEXT);
      INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
      SELECT EXTRACT(epoch FROM to_timestamp(a, 'YYYY-MM-DD')) FROM time_test;

      The following result is returned:

       date_part
      ------------
       1001606400
  • Compatibility: Starting from Hologres V4.0, the following date and time truncation functions are supported to provide better compatibility with ClickHouse and Doris. These functions do not support constants as input parameters.

    Function name

    Return type

    Description

    • extract_century(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(century from timestamp), but with better performance.

    • extract_day(timestamp)

    • toDayOfMonth(timestamp)

    • day(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(day from timestamp), but with better performance.

    • extract_decade(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(decade from timestamp), but with better performance.

    • extract_dow(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(dow from timestamp), but with better performance.

    • extract_doy(timestamp)

    • toDayOfYear(timestamp)

    • dayofyear(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(doy from timestamp), but with better performance.

    • extract_hour(timestamp)

    • toHour(timestamp)

    • hour(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(hour from timestamp), but with better performance.

    • extract_isodow(timestamp)

    • dayofweek_iso(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(isodow from timestamp), but with better performance.

    • extract_minute(timestamp)

    • toMinute(timestamp)

    • minute(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(minute from timestamp), but with better performance.

    • extract_month(timestamp)

    • toMonth(timestamp)

    • month(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(month from timestamp), but with better performance.

    • extract_quarter(timestamp)

    • toQuarter(timestamp)

    • quarter(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(quarter from timestamp), but with better performance.

    • extract_second(timestamp)

    • toSecond(timestamp)

    • second(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(second from timestamp), but with better performance.

    • extract_isoweek(timestamp)

    • toIsoWeek(timestamp)

    • week_iso(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(week from timestamp), but with better performance.

    • extract_year(timestamp)

    • toYear(timestamp)

    • year(timestamp)

    DOUBLE PRECISION

    Same semantics as extract(year from timestamp), but with better performance.

DATE_PART

  • Description: Extracts a specific part, such as the year, month, day, or hour part, from a timestamp. This function is equivalent to the EXTRACT function.

    DATE_PART(<str> TEXT, <d> TIMESTAMP)
  • Parameters:

    • str: required. The part that you want to extract. Valid values: century, day, decade, dow (the day of the week, with Sunday being 0), isodow (the day of the week, with Sunday being 7), doy (the day of the year), epoch (the number of days since the Unix epoch), hour, minute, month, quarter, second, week, and year.

    • d: required. The date and time expression.

  • Return value:

    A value of the DOUBLE PRECISION type is returned.

  • Examples:

    • Example 1: Extract the hour part from a timestamp.

      SELECT DATE_PART('hour', timestamp '2001-02-16 16:38:40');

      The following result is returned:

       date_part
      -----------
              16
    • Example 2: Extract the number of weeks from January 1 to a specified date.

      SELECT DATE_PART('week', TO_DATE('2022-10-11', 'YYYY-MM-DD'));

      The following result is returned:

       date_part
      -----------
              41
    • Example 3: Extract the number of months from January 1 to a specified date.

      SELECT DATE_PART('month', TO_DATE('2022-10-11', 'YYYY-MM-DD'));

      The following result is returned:

       date_part
      -----------
              10

DATE_TRUNC

  • Description: Truncates date and time data to a specified time unit.

    DATE_TRUNC(<str> TEXT, <d> TIME|TIMESTAMP|TIMESTAMPTZ)
  • Parameters:

    • str: required. The time unit. Valid values: century, decade, year, quarter, month, week, day, hour, minute, and second.

    • d: required. The date and time data that you want to truncate.

  • Return value:

    A value of the TIMESTAMP or TIMESTAMPTZ type is returned.

  • Examples:

    • Example 1: Truncate a specified timestamp to the hour part.

      SELECT DATE_TRUNC('hour', time '12:38:40');

      The following result is returned:

       date_trunc
      ------------
       12:00:00
    • Example 2: Truncate a specified timestamp to the day part.

      SELECT DATE_TRUNC('day', timestamptz'2001-02-16 20:38:40+08');

      The following result is returned:

             date_trunc
      ------------------------
       2001-02-16 00:00:00+08
    • Example 3: Truncate a specified timestamp to the month part.

      SELECT DATE_TRUNC('month', timestamp '2001-02-16 18:38:40');

      The following result is returned:

           date_trunc
      ---------------------
       2001-02-01 00:00:00
    • Example 4: Truncate the current timestamp to the month part and add 12 hours to return 12:00:00 on the first day of the current month.

      SELECT DATE_TRUNC('month',now()) +interval '12h';

      The following result is returned:

              ?column?
      ---------------------
       2024-08-01 12:00:00+08
    • Example 5: Truncate the current timestamp to the day part and add 9 hours to return 09:00:00 on the current day.

      SELECT DATE_TRUNC('day',now()) + interval '9h';

      The following result is returned:

              ?column?
      ------------------------
       2024-08-08 09:00:00+08
    • Example 6: Extracting the same day of the week.

      SELECT DATE_TRUNC('day',now()) + interval '7d';

      The following result is returned:

              ?column?
      ------------------------
       2024-08-15 00:00:00+08

TRUNC

  • Description: Truncates a date or timestamp to a specified time unit. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

    TRUNC(<d> DATE|TIMESTAMP [, <str> TEXT])
  • Parameters:

    • d: required. The date and time value that you want to truncate. If you specify a value of the TIMESTAMPTZ type, the remaining part is set to 0.

    • str: optional. The time unit. If you do not configure this parameter, the original date is returned. You can set this parameter to Y or Q. The value Y indicates the first day of the year, and the value Q indicates the first day of the quarter. For more information, see the Oracle documentation.

  • Return value:

    A value of the DATE or TIMESTAMPTZ type is returned.

  • Examples:

    • Example 1:

      SELECT TRUNC('2022-05-22'::date,'Y');

      The following result is returned:

         trunc
      ------------
       2022-01-01
    • Example 2:

      SELECT TRUNC('2022-05-22 13:11:22'::timestamp,'Y');

      The following result is returned:

              trunc
      ---------------------
       2022-01-01 00:00:00
    • Example 3:

      SELECT TRUNC('2022-05-22 13:11:22'::timestamp,'Q');

      The following result is returned:

              trunc
      ---------------------
       2022-04-01 00:00:00
    • Example 4:

      SELECT TRUNC('2022-05-22 13:11:22'::timestamp);

      The following result is returned:

              trunc
      ---------------------
       2022-05-22 00:00:00

ROUND

  • Description: Rounds a date to the nearest value based on a time unit. This function is compatible with Oracle. Before you use this function, you must install the Orafce extension. For more information, see Supported Oracle functions.

    ROUND(<d> DATE|TIMESTAMPTZ [, <str> TEXT])
  • Parameters:

    • d: required. The date that you want to round. If you specify a value of the TIMESTAMPTZ type, the remaining part is set to 0.

    • str: optional. The time unit. If you do not configure this parameter, this function rounds a date to the nearest day. You can set this parameter to Y, which indicates the first day of the nearest year. For more information, see the Oracle documentation.

  • Return value:

    A value of the DATE or TIMESTAMPTZ type is returned.

  • Examples:

    • Example 1:

      SELECT ROUND('2022-05-22'::date,'Y');

      The following result is returned:

         round
      ------------
       2022-01-01
    • Example 2:

      SELECT ROUND('2022-07-22'::date,'Y');

      The following result is returned:

         round
      ------------
       2023-01-01
    • Example 3:

      SELECT ROUND('2022-07-22 13:11:22'::timestamp,'Y');

      The following result is returned:

              round
      ---------------------
       2023-01-01 00:00:00
    • Example 4:

      SELECT ROUND('2022-02-22 13:11:22'::timestamp);

      The following result is returned:

              round
      ---------------------
       2022-02-23 00:00:00

Current date and time acquisition functions

CURRENT_DATE

  • Description: Returns the current date.

    CURRENT_DATE
  • Return value:

    A value of the DATE type is returned.

  • Example:

    SELECT CURRENT_DATE;

    The following result is returned:

     current_date
    --------------
     2024-08-08

CURRENT_TIMESTAMP

  • Description: Returns the start time of the current transaction. This function is equivalent to the TRANSACTION_TIMESTAMP or NOW function.

    CURRENT_TIMESTAMP
    Note

    The return value remains unchanged during the lifecycle of the transaction.

  • Return value:

    A value of the TIMESTAMPTZ type is returned.

  • Example:

    SELECT CURRENT_TIMESTAMP;

    The following result is returned:

           current_timestamp
    -------------------------------
     2024-08-08 14:55:11.006068+08

CLOCK_TIMESTAMP

  • Description: Returns the current date and time.

    clock_timestamp()
    Note

    Changes can also be made within a single command.

  • Return value:

    A value of the TIMESTAMPTZ type is returned.

  • Example:

    SELECT clock_timestamp();

    The following result is returned:

            clock_timestamp
    -------------------------------
     2024-08-08 14:57:43.569109+08

LOCALTIMESTAMP

  • Description: Returns the current time that does not contain the time zone information.

    LOCALTIMESTAMP
  • Return value:

    A value of the TIMESTAMPTZ type is returned.

  • Example:

    SELECT LOCALTIMESTAMP;

    The following result is returned:

          localtimestamp
    ---------------------------
     2024-08-08 15:00:59.13245

NOW

  • Description: Returns the start time of the current transaction. This function is equivalent to the TRANSACTION_TIMESTAMP or CURRENT_TIMESTAMP function.

    NOW()
    Note

    The return value remains unchanged during the lifecycle of the transaction.

  • Return value:

    A value of the TIMESTAMPTZ type is returned.

  • Example:

    SELECT NOW();

    The following result is returned:

                  now
    -------------------------------
     2024-08-08 15:02:50.270501+08

STATEMENT_TIMESTAMP

  • Description: Returns the start time of the current statement.

    STATEMENT_TIMESTAMP()
    Note

    The return value varies based on the statement of the transaction in which the function is used.

  • Return value:

    A value of the TIMESTAMPTZ type is returned.

  • Example:

    SELECT STATEMENT_TIMESTAMP();

    The following result is returned:

          statement_timestamp
    -------------------------------
     2024-08-08 15:06:14.772939+08

TIMEOFDAY

  • Description: Returns the current date and time. This function is similar to the CLOCK_TIMESTAMP function. The value returned by the TIMEOFDAY function is a formatted text string.

    TIMEOFDAY()
  • Return value:

    A value of the TEXT type is returned.

  • Example:

    SELECT TIMEOFDAY();

    The following result is returned:

                  timeofday
    -------------------------------------
     Thu Aug 08 15:08:16.599369 2024 CST

TRANSACTION_TIMESTAMP

  • Description: Returns the start time of the current transaction. This function is equivalent to the CURRENT_TIMESTAMP or NOW function.

    TRANSACTION_TIMESTAMP()
    Note

    The return value remains unchanged during the lifecycle of the transaction.

  • Return value:

    A value of the TIMESTAMPTZ type is returned.

  • Example:

    SELECT TRANSACTION_TIMESTAMP();

    The following result is returned:

         transaction_timestamp
    -------------------------------
     2024-08-08 15:11:10.329005+08

Other functions

ISFINITE

  • Description:

    • Checks whether a date of the DATE type is a finite number.

      ISFINITE(DATE)
    • Checks whether a timestamp is a finite number.

      ISFINITE(TIMESTAMP)
  • Return value:

    A value of the BOOLEAN type is returned. The value true (t) is returned if the date or timestamp is a finite number, and the value false (f) is returned if the date or timestamp is not a finite number.

  • Examples:

    • Example 1:

      SELECT ISFINITE(date '2001-02-16');

      The following result is returned:

       isfinite
      ----------
       t
    • Example 2:

      SELECT ISFINITE(timestamp '2001-02-16 21:28:30');

      The following result is returned:

       isfinite
      ----------
       t

Common sample SQL statements

  • Example 1: Add several hours to the current time.

    SELECT NOW()+interval '2 hour';

    The following result is returned:

    ?column?
    ---------------------
    2022-12-29 13:43:58.321104+08
  • Example 2: Convert a date into a timestamp.

    SELECT EXTRACT(epoch FROM current_timestamp);

    The following result is returned:

    date_part
    ---------------------
    1672285506.296279
  • Example 3: Add a value of the DATE type and a value of the INT type.

    CREATE TABLE date_test1(
        a DATE,
        b INT );
    INSERT INTO date_test1 VALUES ('2021-09-28','12');
    SELECT a + (b || ' month')::interval FROM date_test1;   

    The following result is returned:

    ?column?
    --------------------
     2022-09-28 00:00:00
  • Example 4: Convert a string into a timestamp.

    SELECT TO_TIMESTAMP(TO_CHAR(20211027172045,'9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS');

    The following result is returned:

    to_timestamp
    ----------------------
    2021-10-27 17:20:45+08
  • Example 5: Truncating time

    SELECT EXTRACT(mon FROM now());

    The following result is returned:

    date_part
    ---------
    12
  • Example 6: Divide an integer by another integer.

    When you divide two integers, Hologres performs integer division and discards the remainder. For example, the result of 10/3 is 3. To obtain a result with a decimal part, explicitly cast the data type to float before the calculation, as shown in the following example:

    SELECT 10/3::float;

    The following result is returned:

    ?column?
    ---------
    3.3333333333333335