Data Type Formatting Functions
Applies to: ✅ Data Cloud SQL ✅ Tableau Hyper API
The formatting functions provide a set of tools that convert data types to formatted strings and formatted strings to specific data types. The first argument is the value to be formatted, and the second argument is a template that defines the output or input format.
Formatting conversion functions:
Function | Description | Example |
---|---|---|
to_char(timestamp, text) → text | convert timestamp to string | to_char(current_timestamp, 'HH12:MI:SS') |
to_char(interval, text) → text | convert interval to string | to_char(interval '15h 2m 12s', 'HH24:MI:SS') |
to_date(text, text) → date | convert string to date | to_date('05 Dec 2000', 'DD Mon YYYY') |
to_timestamp(text, text) → timestamp with time zone | convert string to timestamp | to_timestamp('05 Dec 2000', 'DD Mon YYYY') |
to_timestamp
and to_date
handle input formats that simple casting can’t convert. For most standard date/time formats, cast the source string to the required data type without to_timestamp
or to_date.
In a to_char
output template string, certain patterns are recognized and replaced with appropriately formatted data based on the given value. Any text that is not a template pattern is copied verbatim. Similarly, in an input template string for the other functions, template patterns identify the values to be supplied by the input data string. If there are characters in the template string that aren’t template patterns, the corresponding characters in the input data string are skipped.
The template patterns available for formatting date and time values are:
Pattern | Description |
---|---|
HH | hour of day (01-12) |
HH12 | hour of day (01-12) |
HH24 | hour of day (00-23) |
MI | minute (00-59) |
SS | second (00-59) |
MS | millisecond (000-999) |
US | microsecond (000000-999999) |
SSSS | seconds past midnight (0-86399) |
AM , am , PM or pm | meridiem indicator (without periods) |
A.M. , a.m. , P.M. or p.m. | meridiem indicator (with periods) |
Y,YYY | year (4 or more digits) with comma |
YYYY | year (4 or more digits) |
YYY | last 3 digits of year |
YY | last 2 digits of year |
Y | last digit of year |
IYYY | ISO 8601 week-numbering year (4 or more digits) |
IYY | last 3 digits of ISO 8601 week-numbering year |
IY | last 2 digits of ISO 8601 week-numbering year |
I | last digit of ISO 8601 week-numbering year |
BC , bc , AD or ad | era indicator (without periods) |
B.C. , b.c. , A.D. or a.d. | era indicator (with periods) |
MONTH | full upper case English month name (blank-padded to 9 chars) |
Month | full capitalized English month name (blank-padded to 9 chars) |
month | full lower case English month name (blank-padded to 9 chars) |
MON | abbreviated upper case English month name (3 chars) |
Mon | abbreviated capitalized English month name (3 chars) |
mon | abbreviated lower case English month name (3 chars) |
MM | month number (01-12) |
DAY | full upper case English day name (blank-padded to 9 chars) |
Day | full capitalized English day name (blank-padded to 9 chars) |
day | full lower case English day name (blank-padded to 9 chars) |
DY | abbreviated upper case English day name (3 chars) |
Dy | abbreviated capitalized English day name (3 chars) |
dy | abbreviated lower case English day name (3 chars) |
DDD | day of year (001-366) |
IDDD | day of ISO 8601 week-numbering year (001-371; day 1 of the year is Monday of the first ISO week) |
DD | day of month (01-31) |
D | day of the week, Sunday (1 ) to Saturday (7 ) |
ID | ISO 8601 day of the week, Monday (1 ) to Sunday (7 ) |
W | week of month (1-5) (the first week starts on the first day of the month) |
WW | week number of year (1-53) (the first week starts on the first day of the year) |
IW | week number of ISO 8601 week-numbering year (01-53; the first Thursday of the year is in week 1) |
CC | century (2 digits) (the twenty-first century starts on 2001-01-01) |
J | Julian Day (integer days since November 24, 4714 BC at midnight UTC) |
Q | quarter |
RM | month in upper case Roman numerals (I-XII, I=January) |
rm | month in lower case Roman numerals (i-xii, i=January) |
TZ | upper case time-zone abbreviation (only supported in to_char ) |
tz | lower case time-zone abbreviation (only supported in to_char ) |
TZH | time-zone hours |
TZM | time-zone minutes |
OF | time-zone offset from UTC (only supported in to_char ) |
Modifiers can be applied to any template pattern to alter its behavior. For example, FMMonth
is the Month
pattern with the FM
modifier. The modifier patterns for date/time formatting are:
Modifier | Description | Example |
---|---|---|
FM prefix | fill mode (suppress leading zeroes and padding blanks) | FMMonth |
TH suffix | upper case ordinal number suffix | DDTH , e.g., 12TH |
th suffix | lower case ordinal number suffix | DDth , e.g., 12th |
Usage notes for date/time formatting:
-
FM
suppresses leading zeroes and trailing blanks that are added to make the output of a pattern fixed-width.FM
modifies only the next specification and repeatedFM
modifiers switch fill mode on and off. -
Text in
to_char
templates is output literally. You can put a substring in double quotes to force it to be interpreted as literal text even if it contains template patterns. For example, in'"Hello Year "YYYY'
, theYYYY
is replaced by the year data, but the singleY
inYear
isn’t replaced. Into_timestamp
andto_date
, literal text and double-quoted strings skip the number of characters contained in the string. For example,"XX"
skips two input characters. -
If you want to have a double quote in the output, precede it with a backslash. For example
'\"YYYY Month\"'
. Within a double-quoted string, a backslash causes the next character to be taken literally. -
In
to_timestamp
andto_date
, theYYYY
can't process a year with more than four digits. For example, the year 20000to_date('200001131', 'YYYYMMDD')
is interpreted as a four-digit year. Use a non-digit character or template afterYYYY
to process longer year values. Instead, use a non-digit separator after the year. For example,to_date('20000-1131', 'YYYY-MMDD')
orto_date('20000Nov31', 'YYYYMonDD')
. -
In
to_timestamp
andto_date
, theCC
(century) field is accepted but ignored if there is aYYY
,YYYY
, orY,YYY
field. IfCC
is used withYY
orY
, then the result is computed as that year in the specified century. If the century is specified but the year isn’t, the first year of the century is assumed. -
In
to_timestamp
andto_date
, an ISO 8601 week-numbering date (as distinct from a Gregorian date) can be specified in one of two ways.-
Year, week number, and weekday. For example,
to_date('2006-42-4', 'IYYY-IW-ID')
returns the date2006-10-19
. If you omit the weekday, it’s assumed to be one (Monday). -
Year and day of year. For example,
to_date('2006-291', 'IYYY-IDDD')
also returns2006-10-19
.
A date with a mixture of ISO 8601 week-numbering fields and Gregorian date fields returns an error.
to_char
can use a mixture of Gregorian and ISO week-numbering date fields, but values likeIYYY-MM-DD
yield mixed results near the start of the year. -
-
In
to_timestamp
, millisecond (MS
) or microsecond (US
) fields are used as the seconds digits after the decimal point. For example,to_timestamp('12.3', 'SS.MS')
isn’t 3 milliseconds, it’s 300, because the conversion treats it as 12 + 0.3 seconds. So, for the formatSS.MS
, the input values12.3
,12.30
, and12.300
specify the same number of milliseconds. To get 3 milliseconds, write12.003
, which the conversion treats as 12 + 0.003 = 12.003 seconds. -
to_char(..., 'ID')
day of the week numbering matches theextract(isodow from ...)
function, butto_char(..., 'D')
doesn't matchextract(dow from ...)
day numbering. -
to_char(interval)
formatsHH
andHH12
as shown on a 12-hour clock. For example, zero hours and 36 hours both output as12
.HH24
outputs the full hour value, which can exceed 23 in aninterval
value.
to_char
examples: