| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| <!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd"> |
| <concept id="conversion_functions"> |
| |
| <title>Impala Type Conversion Functions</title> |
| |
| <titlealts audience="PDF"> |
| |
| <navtitle>Type Conversion Functions</navtitle> |
| |
| </titlealts> |
| |
| <prolog> |
| <metadata> |
| <data name="Category" value="Impala"/> |
| <data name="Category" value="Impala Functions"/> |
| <data name="Category" value="Impala Data Types"/> |
| <data name="Category" value="SQL"/> |
| <data name="Category" value="Data Analysts"/> |
| <data name="Category" value="Developers"/> |
| <data name="Category" value="Querying"/> |
| </metadata> |
| </prolog> |
| |
| <conbody> |
| |
| <p> |
| Conversion functions are typically used in combination with other functions to explicitly |
| pass the expected data types. Impala has strict rules regarding data types for function |
| parameters. For example, Impala does not automatically convert a <codeph>DOUBLE</codeph> |
| value to <codeph>FLOAT</codeph>, a <codeph>BIGINT</codeph> value to <codeph>INT</codeph>, |
| or other conversion where precision could be lost or overflow could occur. Also, for |
| reporting or dealing with loosely defined schemas in big data contexts, you might need to |
| convert values to or from the <codeph>STRING</codeph> type. |
| </p> |
| |
| <p> |
| <b>Function reference:</b> |
| </p> |
| |
| <p> |
| Impala supports the following type conversion functions: |
| </p> |
| |
| <ul> |
| <li> |
| <xref href="#conversion_functions/cast">CAST</xref> |
| </li> |
| |
| <li> |
| <xref href="#conversion_functions/typeof">TYPEOF</xref> |
| </li> |
| </ul> |
| |
| <dl> |
| <dlentry id="cast"> |
| |
| <dt> |
| CAST(expression AS type) |
| </dt> |
| |
| <dd> |
| <b>Purpose:</b> Returns <varname>expression</varname> converted to the |
| <varname>type</varname> data type. |
| <p> |
| If the <varname>expression</varname> value is of a type that cannot be converted to |
| the target <varname>type</varname>: |
| <ul> |
| <li> |
| Of <codeph>DECIMAL</codeph>, <codeph>DATE</codeph>, and |
| <codeph>BOOLEAN</codeph>, the function returns an error. |
| </li> |
| |
| <li> |
| Of all other types, the function returns <codeph>NULL</codeph>. |
| </li> |
| </ul> |
| </p> |
| |
| <p> |
| <b>Usage notes:</b> |
| </p> |
| |
| <p> |
| Use <codeph>CAST</codeph> when passing a column value or literal to a function that |
| expects a parameter with a different type. Frequently used in SQL operations such as |
| <codeph>CREATE TABLE AS SELECT</codeph> and <codeph>INSERT ... VALUES</codeph> to |
| ensure that values from various sources are of the appropriate type for the |
| destination columns. |
| </p> |
| |
| <p> |
| Where practical, do a one-time <codeph>CAST()</codeph> operation during the |
| ingestion process to make each column into the appropriate type, rather than using |
| many <codeph>CAST()</codeph> operations in each query; doing type conversions for |
| each row during each query can be expensive for tables with millions or billions of |
| rows. |
| </p> |
| |
| <p |
| conref="../shared/impala_common.xml#common/timezone_conversion_caveat"/> |
| |
| <p conref="../shared/impala_common.xml#common/related_info"/> |
| |
| <p> |
| For details of casts from each kind of data type, see the description of the |
| appropriate type: <xref |
| href="impala_tinyint.xml#tinyint"/>, |
| <xref |
| href="impala_smallint.xml#smallint"/>, |
| <xref |
| href="impala_int.xml#int"/>, |
| <xref href="impala_bigint.xml#bigint" |
| />, |
| <xref href="impala_float.xml#float"/>, |
| <xref |
| href="impala_double.xml#double"/>, |
| <xref |
| href="impala_decimal.xml#decimal">DECIMAL Data Type</xref>, |
| <xref |
| href="impala_string.xml#string"/>, |
| <xref |
| href="impala_char.xml#char">CHAR Data Type</xref>, |
| <xref |
| href="impala_varchar.xml#varchar">VARCHAR Data Type</xref>, |
| <xref |
| href="impala_timestamp.xml#timestamp"/>, |
| <xref |
| href="impala_boolean.xml#boolean"/> |
| </p> |
| </dd> |
| |
| </dlentry> |
| |
| <dlentry id="cast_format"> |
| |
| <dt> |
| CAST(expression AS type FORMAT pattern) |
| </dt> |
| |
| <dd> |
| <b>Purpose:</b> Returns <varname>expression</varname> converted to the |
| <varname>type</varname> data type based on the <varname>pattern</varname> format |
| string. This signature of <codeph>CAST()</codeph> with the <codeph>FORMAT</codeph> |
| clause is supported only for casts between <codeph>STRING</codeph> / |
| <codeph>CHAR</codeph> / <codeph>VARCHAR</codeph> types and <codeph>TIMESTAMP</codeph> |
| / <codeph>DATE</codeph> types. |
| <note> |
| The patterns allowed in the <codeph>FORMAT</codeph> clause support ISO SQL:2016 |
| standard patterns. Those patterns are not the same format patterns used with the |
| other Impala conversion functions, e.g. <codeph>TO_TIMESTAMP()</codeph> and |
| <codeph>FROM_TIMESTAMP()</codeph>. |
| </note> |
| |
| <p> |
| The following rules apply to <varname>pattern</varname>. Any exceptions to these |
| rules are noted in the Details column of the table below. |
| <ul> |
| <li> |
| <varname>pattern</varname> is a case-insensitive <codeph>STRING</codeph> unless |
| noted otherwise in the table below. |
| </li> |
| |
| <li> |
| If <varname>pattern</varname> is <codeph>NULL</codeph>, an empty string, or a |
| number, an error returns. |
| </li> |
| |
| <li> |
| A fewer digits in <varname>expression</varname> than specified in the |
| <varname>pattern</varname> is accepted if a separator is correctly specified in |
| the <varname>pattern</varname>. For example, <codeph>CAST('5-01-2017' AS DATE |
| FORMAT 'MM-dd-yyyy')</codeph> returns <codeph>DATE'2017-05-01'</codeph>. |
| </li> |
| |
| <li> |
| If fewer number of digits are in <varname>expression</varname> than specified in |
| the <varname>pattern</varname>, the current date is used to complete the year |
| pattern. For example, <codeph>CAST('19/05' AS DATE FORMAT 'YYYY/MM')</codeph> |
| will return <codeph>DATE'2019-05-01'</codeph> when executed on August 8, 2019. |
| </li> |
| </ul> |
| </p> |
| |
| <p> |
| The following format patterns are supported in the <codeph>FORMAT</codeph> clause. |
| <table frame="all" rowsep="1" |
| colsep="1" id="table_gbt_5ym_r3b"> |
| <tgroup cols="3" align="left"> |
| <colspec colname="c1" colnum="1" colwidth="1*"/> |
| <colspec colname="c2" colnum="2" colwidth="1.75*"/> |
| <colspec colname="newCol3" colnum="3" colwidth="6.6*"/> |
| <thead> |
| <row> |
| <entry> |
| Pattern |
| </entry> |
| <entry> |
| Description |
| </entry> |
| <entry> |
| Details |
| </entry> |
| </row> |
| </thead> |
| <tbody> |
| <row> |
| <entry> |
| <codeph>YYYY</codeph> |
| </entry> |
| <entry> |
| 4-digit year. |
| </entry> |
| <entry/> |
| </row> |
| <row> |
| <entry> |
| <codeph>YYY</codeph> |
| </entry> |
| <entry> |
| Last 3 digits of a year. |
| </entry> |
| <entry/> |
| </row> |
| <row> |
| <entry> |
| <codeph>YY</codeph> |
| </entry> |
| <entry> |
| Last 2 digits of a year. |
| </entry> |
| <entry/> |
| </row> |
| <row> |
| <entry> |
| <codeph>Y</codeph> |
| </entry> |
| <entry> |
| Last digit of a year |
| </entry> |
| <entry/> |
| </row> |
| <row> |
| <entry> |
| <codeph>RRRR</codeph> |
| </entry> |
| <entry> |
| 4-digit round year |
| </entry> |
| <entry> |
| <p> |
| If 1,3 or 4-digit year values are provided in |
| <varname>expression</varname>, treated as <codeph>YYYY</codeph>. |
| </p> |
| |
| |
| |
| <p> |
| If 2-digit years are provided in <varname>expression</varname>, treated |
| as <codeph>RR</codeph>. |
| </p> |
| |
| |
| |
| <p> |
| For date/time to string conversions, treated as <codeph>YYYY</codeph>. |
| </p> |
| |
| |
| |
| <p> |
| If <codeph>YYYY</codeph>, <codeph>YYY</codeph>, <codeph>YY</codeph>, |
| <codeph>Y</codeph>, or <codeph>RR</codeph> is given in the same |
| <varname>pattern</varname> for a string to date/time conversion, an |
| error returns. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>RR</codeph> |
| </entry> |
| <entry> |
| 2-digit round year. |
| </entry> |
| <entry> |
| <p> |
| For date/time to string conversions, same as <codeph>YY</codeph>. |
| </p> |
| |
| |
| |
| <p> |
| For string to date/time conversions, the first 2 digits of the year in |
| the return value depends on the specified two-digit year and the last |
| two digits of the current year as follows: |
| <ul> |
| <li> |
| <p> |
| If the specified 2-digit year is 00 to 49: |
| </p> |
| <ul> |
| <li> |
| <p> |
| If the last 2 digits of the current year are 00 to 49, the |
| returned year has the same first 2 digits as the current year. |
| </p> |
| </li> |
| |
| <li> |
| <p> |
| If the last 2 digits of the current year are 50 to 99, the |
| first 2 digits of the returned year are 1 greater than the |
| first 2 digits of the current year. |
| </p> |
| </li> |
| </ul> |
| </li> |
| |
| <li> |
| <p> |
| If the specified 2-digit year is 50 to 99: |
| </p> |
| <ul> |
| <li> |
| <p> |
| If the last 2 digits of the current year are 00 to 49, the |
| first 2 digits of the returned year are 1 less than the first |
| 2 digits of the current year. |
| </p> |
| </li> |
| |
| <li> |
| <p> |
| If the last 2 digits of the current year are 50 to 99, the |
| returned year has the same first 2 digits as the current year. |
| </p> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </p> |
| |
| |
| |
| <p> |
| If <codeph>YYYY</codeph>, <codeph>YYY</codeph>, <codeph>YY</codeph>, |
| <codeph>Y</codeph>, or <codeph>RR</codeph> is given in the same |
| <varname>pattern</varname> for a string to date/time conversion, an |
| error returns. |
| </p> |
| |
| |
| |
| <p> |
| If 1-digit year values are provided in <varname>expression</varname>, it |
| is treated as <codeph>YYYY</codeph>. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>Q</codeph> |
| </entry> |
| <entry> |
| Quarter of year (1-4) |
| </entry> |
| <entry> |
| <p> |
| Not supported in string to date/time conversions. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>MM</codeph> |
| </entry> |
| <entry> |
| Month number |
| </entry> |
| <entry> |
| <p> In date/time to string conversions, 1-digit months are |
| prefixed with a zero. </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>MONTH</codeph> |
| |
| <p> |
| <codeph>Month</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>month</codeph> |
| </p> |
| </entry> |
| <entry> |
| Full month name |
| </entry> |
| <entry> |
| In string to date/time conversions: |
| |
| <ul> |
| <li> Converts a textual month name to a 2-digit month |
| number. </li> |
| |
| <li> |
| The input strings are expected without trailing spaces, e.g. |
| "<codeph>June</codeph>", "<codeph>August</codeph>". |
| </li> |
| |
| <li> |
| If the <codeph>FX</codeph> modifier is active for the token, a |
| 9-character-long full month name with trailing spaces is expected for |
| the input string. |
| </li> |
| </ul> |
| |
| <p> |
| In date/time to string conversions: |
| <ul> |
| <li> |
| Converts to a 9-character-long full month name with trailing spaces. |
| </li> |
| |
| <li> |
| If the <codeph>FM</codeph> modifier is active for this token, |
| converts to a month name without trailing spaces. |
| </li> |
| </ul> |
| </p> |
| |
| |
| |
| <p> |
| This pattern token is case sensitive. <codeph>MONTH</codeph>, |
| <codeph>Month</codeph>, <codeph>month</codeph> would require different |
| casing of the input in string to date/time conversions and would produce |
| cased outputs in date/time to string conversions, For example, |
| <codeph>MONTH</codeph>, <codeph>Month</codeph>, <codeph>month</codeph> |
| would convert respectively <codeph>JULY</codeph>, <codeph>July</codeph>, |
| and <codeph>july</codeph>. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>MON</codeph> |
| |
| <p> |
| <codeph>Mon</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>mon</codeph> |
| </p> |
| </entry> |
| <entry> |
| Abbreviated 3-character month name |
| </entry> |
| <entry> |
| <p> |
| This pattern token is case sensitive. <codeph>MON</codeph>, |
| <codeph>Mon</codeph>, <codeph>mon</codeph> would require different |
| casing of the input in string to date/time conversions and would produce |
| cased outputs in date/time to string conversions, For example, |
| <codeph>MON</codeph>, <codeph>Mon</codeph>, <codeph>mon</codeph> would |
| convert respectively <codeph>JUL</codeph>, <codeph>Jul</codeph>, and |
| <codeph>jul</codeph>. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>WW</codeph> |
| </entry> |
| <entry> |
| Week of year (1-53) |
| </entry> |
| <entry> |
| <p> Not supported in string to date/time conversions. </p> |
| |
| |
| |
| <p> The 1st week begins on January 1st and ends on January |
| 7th. </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>W</codeph> |
| </entry> |
| <entry> |
| Week of month (1-5) |
| </entry> |
| <entry> |
| <p> |
| Not supported in string to date/time conversions. |
| </p> |
| |
| |
| |
| <p> |
| 1st week begins on the 1st of the month and ends on the 7th. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>D</codeph> |
| </entry> |
| <entry> |
| Day of week (1-7) |
| </entry> |
| <entry> |
| <p> |
| Not supported in string to date/time conversions. |
| </p> |
| |
| In date/time to string conversions, converts to a day number, for example, |
| 1 for Sunday, 2 for Monday. |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>DD</codeph> |
| </entry> |
| <entry> |
| Day of month (1-31) |
| </entry> |
| <entry> |
| <p> In date/time to string conversions, 1-digit days are |
| prefixed with a zero. </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>DDD</codeph> |
| </entry> |
| <entry> |
| Day of year (1-366) |
| </entry> |
| <entry> |
| <p> |
| In string to date/time conversions, providing <codeph>MM</codeph> and |
| <codeph>DD</codeph> along with <codeph>DDD</codeph> results an error, |
| e.g. <codeph>YYYY-MM-DDD</codeph>. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>DAY</codeph> |
| |
| <p> |
| <codeph>Day</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>day</codeph> |
| </p> |
| </entry> |
| <entry> |
| Day name |
| </entry> |
| <entry> |
| <p> |
| Not supported in string to date/time conversions. |
| </p> |
| |
| |
| |
| <p> |
| In date/time to string conversions: |
| <ul> |
| <li> |
| Converts to a 9-character-long full day name with trailing spaces. |
| </li> |
| |
| <li> |
| If the <codeph>FM</codeph> modifier is active for this token, |
| converts to a day name without trailing spaces. |
| </li> |
| </ul> |
| </p> |
| |
| |
| |
| <p> |
| This pattern token is case sensitive. <codeph>DAY</codeph>, |
| <codeph>Day</codeph>, <codeph>day</codeph> would produce cased outputs |
| in date/time to string conversions, For example, <codeph>DAY</codeph>, |
| <codeph>Day</codeph>, <codeph>day</codeph> would convert respectively |
| <codeph>MONDAY</codeph>, <codeph>Monday</codeph>, and |
| <codeph>monday</codeph>. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>DY</codeph> |
| |
| <p> |
| <codeph>Dy</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>dy</codeph> |
| </p> |
| </entry> |
| <entry> |
| Abbreviated 3-character day name |
| </entry> |
| <entry> |
| <p> |
| Not supported in string to date/time conversions. |
| </p> |
| |
| |
| |
| <p> |
| This pattern token is case sensitive. <codeph>DY</codeph>, |
| <codeph>Dy</codeph>, <codeph>dy</codeph> would produce cased outputs in |
| date/time to string conversions, For example, <codeph>DY</codeph>, |
| <codeph>Dy</codeph>, <codeph>dy</codeph> would convert respectively |
| <codeph>MON</codeph>, <codeph>Mon</codeph>, and <codeph>mon</codeph>. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>HH</codeph> |
| |
| <p> |
| <codeph>HH12</codeph> |
| </p> |
| </entry> |
| <entry> |
| Hour of day (1-12) |
| </entry> |
| <entry> |
| <p> |
| In date/time to string conversions, 1-digit hours are prefixed with a |
| zero. |
| </p> |
| |
| |
| |
| <p> |
| If provided hour in <varname>expression</varname> is not between 1 and |
| 12, returns an error. |
| </p> |
| |
| |
| |
| <p> |
| If no AM/PM is provided in <varname>expression</varname>, the default is |
| <codeph>AM</codeph>. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>HH24</codeph> |
| </entry> |
| <entry> |
| Hour of day (0-23) |
| </entry> |
| <entry> |
| <p> |
| In string to date/time conversions, if <codeph>HH12</codeph>, |
| <codeph>AM</codeph>, <codeph>PM</codeph> are given in the same |
| <varname>pattern</varname>, an error returns. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>MI</codeph> |
| </entry> |
| <entry> |
| Minute of hour (0-59) |
| </entry> |
| <entry> |
| <p> |
| In date/time to string conversions, 1-digit minutes are prefixed with a |
| zero. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>SS</codeph> |
| </entry> |
| <entry> |
| Second of minute (0-59) |
| </entry> |
| <entry> |
| <p> |
| In date/time to string conversions, 1-digit seconds are prefixed with a |
| zero. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>SSSSS</codeph> |
| </entry> |
| <entry> |
| Second of Day (0-86399) |
| </entry> |
| <entry> |
| <p> |
| In string to timestamp conversions, if <codeph>SS</codeph>, |
| <codeph>HH</codeph>, <codeph>HH12</codeph>, <codeph>HH24</codeph>, |
| <codeph>MI</codeph>, <codeph>AM</codeph>/<codeph>PM</codeph> are given |
| in the same <varname>pattern</varname>, an error returns. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>FF</codeph> |
| |
| <p> |
| <codeph>FF1</codeph>, ..., <codeph>FF9</codeph> |
| </p> |
| </entry> |
| <entry> |
| Fractional second |
| </entry> |
| <entry> |
| <p> |
| A number, 1 to 9, can be used to indicate the number of digits. |
| </p> |
| |
| |
| |
| <p> |
| <codeph>FF</codeph> specifies a 9 digits fractional second. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>AM</codeph> |
| |
| <p> |
| <codeph>PM</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>A.M.</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>P.M.</codeph> |
| </p> |
| </entry> |
| <entry> |
| Meridiem indicator |
| </entry> |
| <entry> |
| <p> |
| For date/time to string conversions, <codeph>AM</codeph> and |
| <codeph>PM</codeph> are treated as synonyms. For example, casting |
| <codeph>'2019-01-01 11:00 am'</codeph> to <codeph>TIMESTAMP</codeph> |
| with the <codeph>'YYYY-MM-DD HH12:MI PM'</codeph> pattern returns |
| <codeph>01-JAN-19 11.00.00.000000 AM</codeph>. |
| </p> |
| |
| |
| |
| <p> |
| For string to date/time conversion, <codeph>HH24</codeph> in the same |
| <varname>pattern</varname> returns an error. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>TZH</codeph> |
| </entry> |
| <entry> |
| Timezone offset hour |
| </entry> |
| <entry> |
| <p> |
| An optional sign, + or -, and 2 digits for the value of signed numbers |
| are allowed for the source <varname>expression</varname>, e.g. |
| <codeph>+10</codeph>, <codeph>-05</codeph>, <codeph>04</codeph>. |
| </p> |
| |
| |
| |
| <p> |
| The allowed values are from <codeph>-15</codeph> to <codeph>+5</codeph>. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>TZM</codeph> |
| </entry> |
| <entry> |
| Timezone offset minute |
| </entry> |
| <entry> |
| <p> |
| Unsigned numbers are allowed for the source |
| <varname>expression</varname>. |
| </p> |
| |
| |
| |
| <p> |
| The allowed values are from <codeph>0</codeph> to <codeph>59</codeph>. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>-</codeph> |
| |
| <p> |
| <codeph>.</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>/</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>,</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>'</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>;</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <codeph>:</codeph> |
| </p> |
| |
| |
| |
| <p> |
| <space> |
| </p> |
| </entry> |
| <entry> |
| Separator |
| </entry> |
| <entry> |
| <p> |
| For string to date/time conversions, any separator character in the |
| <varname>pattern</varname> string would match any separator character in |
| the input <varname>expression</varname>. |
| </p> |
| |
| |
| |
| <p> |
| For example, <codeph>CAST(“20191010” AS DATE FORMAT |
| “YYYY-MM-DD”)</codeph> returns an error, but <codeph>CAST("2019-.;10 |
| 10" AS DATE FORMAT "YYYY-MM-DD")</codeph> succeeds. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>T</codeph> |
| </entry> |
| <entry> |
| Separates the date from the time. |
| </entry> |
| <entry> |
| <p> |
| This pattern is used for accepting ISO 8601 date/time formats. |
| </p> |
| |
| |
| |
| <p> |
| Example: <codeph>YYYY-MM-DD<b>T</b>HH24:MI:SS.FF9Z</codeph> |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>Z</codeph> |
| </entry> |
| <entry> |
| Indicates the zero hour offset from UTC. |
| </entry> |
| <entry> |
| <p> |
| This pattern is used for accepting ISO 8601 date/time formats. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>FX</codeph> |
| </entry> |
| <entry> |
| Forces an exact match between the format pattern, |
| <varname>pattern</varname>, and the input argument, |
| <varname>expression</varname>. |
| </entry> |
| <entry> |
| <p> |
| Must be specified at the beginning of the format |
| <varname>pattern</varname> and is valid for the whole |
| <varname>pattern</varname>. |
| </p> |
| |
| |
| |
| <p> |
| In string to date/time conversions: |
| </p> |
| |
| <ul> |
| <li> |
| Forces strict separator matching, including the separator character. |
| </li> |
| |
| <li> |
| Expects all the tokens to have the maximum possible length. |
| </li> |
| </ul> |
| |
| <p> |
| In date/time to string conversions, the outputs are padded as follows: |
| </p> |
| |
| <ul> |
| <li> |
| Numeric outputs are left padded with zeros. |
| </li> |
| |
| <li> |
| Text outputs are right padded with spaces. |
| </li> |
| </ul> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeph>FM</codeph> |
| </entry> |
| <entry> |
| Overrides <codeph>FX</codeph>. |
| </entry> |
| <entry> |
| <p> |
| In a date/time to string conversions, <codeph>FM</codeph> suppresses |
| blank padding for the element immediately following the |
| <codeph>FM</codeph> in the <varname>pattern</varname> string, e.g. |
| "<codeph>2010-1-9</codeph>". |
| </p> |
| |
| |
| |
| <p> |
| In string to date/time conversions, <codeph>FM</codeph> is used to |
| override the effect of <codeph>FX</codeph> for certain tokens as |
| follows: |
| <ul> |
| <li> |
| <p> |
| The length of the token in the input argument can be shorter than |
| the max length of that token type if followed by a separator, e.g. |
| 1-digit month, less than 4-digit year. |
| </p> |
| </li> |
| |
| <li> |
| <p> |
| <codeph>FM</codeph> modifier skips the separators and affects the |
| next non-separator token. For example, <codeph>CAST('1999-10-2' AS |
| TIMESTAMP FORMAT 'FXYYYY-MM<b>FM</b>-DD') </codeph>returns |
| <codeph>1999-10-02 00:00:00</codeph> as <codeph>FM</codeph> is |
| applied to <codeph>DD</codeph> and not to the |
| separator(<codeph>-</codeph>). |
| </p> |
| </li> |
| </ul> |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| Free text |
| </entry> |
| <entry> |
| Nested string |
| </entry> |
| <entry> |
| <p> |
| You can specify a free text with surrounding double quotes (") in |
| <varname>pattern</varname> where the same text is expected in the input |
| argument without surrounding double quotes. |
| </p> |
| |
| |
| |
| <p> |
| In date/time to string conversions, the string is included in the output |
| with the characters' case preserved. |
| </p> |
| |
| |
| |
| <p> |
| In string to date/time conversions, the nested string is not included in |
| the resulting date/time object. However, the nested string has to match |
| the related part of the input string, including the case. |
| </p> |
| |
| |
| |
| <p> |
| The following rules apply: |
| <ul> |
| <li> |
| <p> |
| If the <varname>pattern</varname> is surrounded by double quotes, |
| double quotes surrounding the free text token must be escaped with |
| a single backslash (<codeph>\"</codeph>). |
| </p> |
| |
| <p> |
| For example: <codeph>CAST('"Date:"2019-11-10' AS DATE FORMAT |
| "<b>\"Date:\"</b>YYYY-MM-DD")</codeph> |
| </p> |
| </li> |
| |
| <li> |
| <p> |
| If the <varname>pattern</varname> is surrounded by double quotes, |
| and there is an escaped double quotes inside a text token that is |
| itself surrounded by escaped double quotes, escape the double |
| quotes in the free text token with a triple backslash: |
| (<codeph>\\\"</codeph>) |
| </p> |
| |
| <p> |
| For example: <codeph>CAST("1985 some \"text 11-28" AS DATE''' |
| FORMAT "YYYY<b>\" some \\\"text \"</b>MM-DD")</codeph> |
| </p> |
| </li> |
| |
| <li> |
| <p> |
| If the <varname>pattern</varname> is surrounded by single quotes, |
| the free text token can be surrounded by (non-escaped) double |
| quotes. To include double quotes within the free text token, those |
| double quotes must be escaped by a single backslash. |
| </p> |
| |
| <p> |
| For example: <codeph>CAST('"Date:"2019-11-10' AS DATE FORMAT |
| '"<b>\"Date:\"</b>"YYYY-MM-DD')</codeph> |
| </p> |
| </li> |
| |
| <li> |
| <p> |
| Literal single quotes/apostrophes (<codeph>'</codeph>) in the |
| nested string must be escaped with a single backslash if the whole |
| pattern string is delimited by single quotes. |
| </p> |
| </li> |
| |
| <li> |
| <p> |
| If a free text token contains any separator characters in the |
| beginning, and the text token is right after a separator token |
| sequence, an error returns as it's not trivial to find where the |
| separator sequence ends and where the free text starts. In this |
| case, use <codeph>FX</codeph> for strict matching. |
| </p> |
| |
| <p> |
| For example: <codeph>CAST("1985-11- ' 10" AS DATE FORMAT |
| "YYYY-MM-<b>\" ' \"</b>DD")</codeph> returns an error, but |
| removing the dash before the text token makes this succeed. |
| </p> |
| </li> |
| </ul> |
| </p> |
| </entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| </p> |
| |
| <p> |
| <b>Examples:</b> |
| </p> |
| <table frame="all" rowsep="1" colsep="1" id="table_qqg_txn_r3b"> |
| <tgroup cols="2" align="left"> |
| <colspec colname="c1" colnum="1" colwidth="1*"/> |
| <colspec colname="c2" colnum="2" colwidth="1*"/> |
| <thead> |
| <row> |
| <entry> |
| Input |
| </entry> |
| <entry> |
| Output |
| </entry> |
| </row> |
| </thead> |
| <tbody> |
| <row> |
| <entry> |
| <codeblock>CAST("02-11-2014" AS DATE FORMAT 'dd-mm-yyyy')</codeblock> |
| </entry> |
| <entry> |
| 2014-11-02 |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST("365 2014" AS DATE FORMAT 'DDD-YYYY')</codeblock> |
| </entry> |
| <entry> |
| 2014-12-31 |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST("5-01-26" AS DATE FORMAT 'YY-MM-DD')</codeblock> |
| </entry> |
| <entry> |
| Executed at 2019-01-01 11:11:11: |
| |
| <p> |
| 2015-01-26 |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST('2018-11-10T15:11:04Z' AS TIMESTAMP |
| FORMAT 'YYYY-MM-DDTHH24:MI:SSZ')</codeblock> |
| </entry> |
| <entry> |
| 2018-11-10 15:11:04 |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST("95-01-28" AS DATE |
| FORMAT 'YYY-MM-DD')</codeblock> |
| </entry> |
| <entry> |
| Executed at 2019-01-01 11:11:11: |
| |
| <p> |
| 2095-01-28 |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST("49-01-15" AS DATE |
| FORMAT 'RR-MM-DD')</codeblock> |
| </entry> |
| <entry> |
| Round year when last 2 digits of current year is greater than 49. |
| |
| <p> |
| Executed at 2099-01-01 11:11:11: |
| </p> |
| |
| |
| |
| <p> |
| 2149-01-15 |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST('2019.10.10 13:30:40.123456 +01:30' |
| AS TIMESTAMP |
| FORMAT 'YYYY-MM-DD HH24:MI:SS.FF9 TZH:TZM') </codeblock> |
| </entry> |
| <entry> |
| 2019-10-10 13:30:40.123456000 |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST('2001-03-01 03:10:15.123456 -01:30' |
| AS TIMESTAMP |
| FORMAT 'FXYYYY-MM-DD HH12:MI:SS.FF6 TZH:TZM')</codeblock> |
| </entry> |
| <entry> |
| 2001-03-01 03:10:15.123456000 |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST('2001-03-02 03:10:15' |
| AS TIMESTAMP |
| FORMAT 'FXYYYY MM-DD HH12:MI:SS')</codeblock> |
| </entry> |
| <entry> |
| NULL because the separator between the year and month do not match. |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST('2001-3-05' |
| AS TIMESTAMP |
| FORMAT 'FXYYYY-MM-DD')</codeblock> |
| </entry> |
| <entry> |
| NULL because the length of the month token does not match the |
| <varname>pattern</varname>. |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST('2001-3-11 3:15:00.12345' |
| AS TIMESTAMP |
| FORMAT 'FXYYYY-FMMM-DD FMHH12:MI:SS.FMFF')</codeblock> |
| </entry> |
| <entry> |
| 2001-03-11 03:15:00.123450000 |
| |
| <p> |
| The multiple <codeph>FM</codeph> modifiers for the month and hour override |
| the <codeph>FX</codeph> and suppress padding. |
| </p> |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST('2019-01-01 01:01:01' |
| AS TIMESTAMP |
| FORMAT 'FMHH12:MI:FMSS')</codeblock> |
| </entry> |
| <entry> |
| 1:01:1 |
| </entry> |
| </row> |
| <row> |
| <entry> |
| <codeblock>CAST('Date: 2019-11-10' |
| AS DATE |
| FORMAT '"Date: "YYYY-MM-DD') |
| </codeblock> |
| </entry> |
| <entry> |
| 2019-11-10 |
| </entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| </dd> |
| |
| </dlentry> |
| |
| <dlentry rev="2.3.0" id="typeof"> |
| |
| <dt> |
| TYPEOF(expression) |
| </dt> |
| |
| <dd> |
| <b>Purpose:</b> Returns the name of the data type corresponding to |
| <varname>expression</varname>. For types with extra attributes, such as length for |
| <codeph>CHAR</codeph> and <codeph>VARCHAR</codeph>, or precision and scale for |
| <codeph>DECIMAL</codeph>, includes the full specification of the type. |
| <p> |
| <b>Return type:</b> <codeph>STRING</codeph> |
| </p> |
| |
| <p> |
| <b>Usage notes:</b> Typically used in interactive exploration of a schema, or in |
| application code that programmatically generates schema definitions such as |
| <codeph>CREATE TABLE</codeph> statements, for example, to get the type of an |
| expression such as <codeph>col1 / col2</codeph> or <codeph>CONCAT(col1, col2, |
| col3)</codeph>. This function is especially useful for arithmetic expressions |
| involving <codeph>DECIMAL</codeph> types because the precision and scale of the |
| result is can be different than that of the operands. |
| </p> |
| |
| <p |
| conref="../shared/impala_common.xml#common/example_blurb" |
| /> |
| |
| <p> |
| <codeph>TYPEOF(2)</codeph> returns <codeph>TINYINT</codeph>. |
| </p> |
| |
| <p> |
| <codeph>TYPEOF(NOW())</codeph> returns <codeph>TIMESTAMP</codeph>. |
| </p> |
| </dd> |
| |
| </dlentry> |
| </dl> |
| |
| </conbody> |
| |
| </concept> |