Function table / Dates / MAKETIME

MAKETIME: from Tableau to SQL

Constructs a datetime from clock components. Below, 8 sample rows go through the calculation and through the SQL, and both return the same numbers.

Calculated field

MAKETIME([hour],[minute],[second])

Sample data

shipmentshippedreceivedtextyearmonthdayhourminutesecondlatlonwkt
12024-12-292024-12-29T16:25:402024-12-2920252259254010106POINT (106 10)
22024-12-302024-12-30T16:25:402024-12-30202522610254010.1106.1POINT (106.1 10.1)
32025-01-012025-01-01T16:25:402025-01-01202522711254010.2106.2POINT (106.2 10.2)
42025-01-312025-01-31T16:25:402025-01-31202522812254010.3106.3POINT (106.3 10.3)
52025-02-282025-02-28T16:25:402025-02-28202522913254010.4106.4POINT (106.4 10.4)
62025-03-152025-03-15T16:25:402025-03-15202523014254010.5106.5POINT (106.5 10.5)
7nullnullnull202523115254010.6106.6POINT (106.6 10.6)
82024-02-292024-02-29T16:25:402024-02-29202523216254010.7106.7POINT (106.7 10.7)

The same calculation as SQL

SELECT TIMESTAMP '1899-12-30 00:00:00'+hour*INTERVAL '1 hour'+minute*INTERVAL '1 minute'+second*INTERVAL '1 second' AS result FROM input ORDER BY shipment

Runs the example above.

Result

shipmentshippedreceivedtextresult
12024-12-292024-12-29T16:25:402024-12-291899-12-30 09:25:40
22024-12-302024-12-30T16:25:402024-12-301899-12-30 10:25:40
32025-01-012025-01-01T16:25:402025-01-011899-12-30 11:25:40
42025-01-312025-01-31T16:25:402025-01-311899-12-30 12:25:40
52025-02-282025-02-28T16:25:402025-02-281899-12-30 13:25:40
62025-03-152025-03-15T16:25:402025-03-151899-12-30 14:25:40
7nullnullnull1899-12-30 15:25:40
82024-02-292024-02-29T16:25:402024-02-291899-12-30 16:25:40

Same rows from the calculation and from the SQL in DuckDB.

Where a naive translation goes wrong

  • Clock construction uses the 1899-12-30 date anchor.

    Naive SQL

    SELECT TIMESTAMP '1970-01-01 00:00:00'+hour*INTERVAL '1 hour'+minute*INTERVAL '1 minute'+second*INTERVAL '1 second' AS result FROM input ORDER BY shipment
    shipmentshippedreceivedtextresult
    12024-12-292024-12-29T16:25:402024-12-291970-01-01 09:25:40
    22024-12-302024-12-30T16:25:402024-12-301970-01-01 10:25:40
    32025-01-012025-01-01T16:25:402025-01-011970-01-01 11:25:40
    42025-01-312025-01-31T16:25:402025-01-311970-01-01 12:25:40
    52025-02-282025-02-28T16:25:402025-02-281970-01-01 13:25:40
    62025-03-152025-03-15T16:25:402025-03-151970-01-01 14:25:40
    7nullnullnull1970-01-01 15:25:40
    82024-02-292024-02-29T16:25:402024-02-291970-01-01 16:25:40

    Matches the calculation

    SELECT TIMESTAMP '1899-12-30 00:00:00'+hour*INTERVAL '1 hour'+minute*INTERVAL '1 minute'+second*INTERVAL '1 second' AS result FROM input ORDER BY shipment
    shipmentshippedreceivedtextresult
    12024-12-292024-12-29T16:25:402024-12-291899-12-30 09:25:40
    22024-12-302024-12-30T16:25:402024-12-301899-12-30 10:25:40
    32025-01-012025-01-01T16:25:402025-01-011899-12-30 11:25:40
    42025-01-312025-01-31T16:25:402025-01-311899-12-30 12:25:40
    52025-02-282025-02-28T16:25:402025-02-281899-12-30 13:25:40
    62025-03-152025-03-15T16:25:402025-03-151899-12-30 14:25:40
    7nullnullnull1899-12-30 15:25:40
    82024-02-292024-02-29T16:25:402024-02-291899-12-30 16:25:40

Signature

MAKETIME(hour, minute, second)