GoogleSQL for Bigtable supports conversion functions. These data type conversions are explicit, but some conversions can happen implicitly. You can learn more about implicit and explicit conversion here.
Function list
| Name | Summary | 
|---|---|
| ARRAY_TO_STRING | Produces a concatenation of the elements in an array as a STRINGvalue.For more information, see Array functions. | 
| CAST | Convert the results of an expression to the given type. | 
| CHR | Converts a Unicode code point to a character. For more information, see String functions. | 
| CODE_POINTS_TO_BYTES | Converts an array of extended ASCII code points to a BYTESvalue.For more information, see String aggregate functions. | 
| CODE_POINTS_TO_STRING | Converts an array of extended ASCII code points to a STRINGvalue.For more information, see String aggregate functions. | 
| DATE_FROM_UNIX_DATE | Interprets an INT64expression as the number of days
    since 1970-01-01.For more information, see Date functions. | 
| FROM_BASE32 | Converts a base32-encoded STRINGvalue into aBYTESvalue.For more information, see String functions. | 
| FROM_BASE64 | Converts a base64-encoded STRINGvalue into aBYTESvalue.For more information, see String functions. | 
| FROM_HEX | Converts a hexadecimal-encoded STRINGvalue into aBYTESvalue.For more information, see String functions. | 
| PARSE_DATE | Converts a STRINGvalue to aDATEvalue.For more information, see Date functions. | 
| PARSE_TIMESTAMP | Converts a STRINGvalue to aTIMESTAMPvalue.For more information, see Timestamp functions. | 
| SAFE_CAST | Similar to the CASTfunction, but returnsNULLwhen a runtime error is produced. | 
| SAFE_CONVERT_BYTES_TO_STRING | Converts a BYTESvalue to aSTRINGvalue and
    replace any invalid UTF-8 characters with the Unicode replacement character,U+FFFD.For more information, see String functions. | 
| STRING(Timestamp) | Converts a TIMESTAMPvalue to aSTRINGvalue.For more information, see Timestamp functions. | 
| TIMESTAMP_MICROS | Converts the number of microseconds since
    1970-01-01 00:00:00 UTC to a TIMESTAMP.For more information, see Timestamp functions. | 
| TIMESTAMP_MILLIS | Converts the number of milliseconds since
    1970-01-01 00:00:00 UTC to a TIMESTAMP.For more information, see Timestamp functions. | 
| TIMESTAMP_SECONDS | Converts the number of seconds since
    1970-01-01 00:00:00 UTC to a TIMESTAMP.For more information, see Timestamp functions. | 
| TO_BASE32 | Converts a BYTESvalue to a
    base32-encodedSTRINGvalue.For more information, see String functions. | 
| TO_BASE64 | Converts a BYTESvalue to a
    base64-encodedSTRINGvalue.For more information, see String functions. | 
| TO_CODE_POINTS | Converts a STRINGorBYTESvalue into an array of
    extended ASCII code points.For more information, see String functions. | 
| TO_FLOAT32 | Converts the big-endian bytes of a 32-bit IEEE 754 floating point number
    into a FLOAT32value.For more information, see String functions. | 
| TO_FLOAT64 | Converts the big-endian bytes of a 64-bit IEEE 754 floating point number
    into a FLOAT64value.For more information, see String functions. | 
| TO_HEX | Converts a BYTESvalue to a
    hexadecimalSTRINGvalue.For more information, see String functions. | 
| TO_INT64 | Converts the big-endian bytes of a 64-bit signed integer into an INT64value.For more information, see String functions. | 
| TO_JSON_STRING | Converts a SQL value to a JSON-formatted STRINGvalue.For more information, see JSON functions. | 
| TO_VECTOR32 | Converts the big-endian bytes of one or more 32-bit IEEE 754 floating
    point numbers into an ARRAY<FLOAT32>value.For more information, see String functions. | 
| TO_VECTOR64 | Converts the big-endian bytes of one or more 64-bit IEEE 754 floating
    point numbers into an ARRAY<FLOAT64>value.For more information, see String functions. | 
| UNIX_DATE | Converts a DATEvalue to the number of days since 1970-01-01.For more information, see Date functions. | 
| UNIX_MICROS | Converts a TIMESTAMPvalue to the number of microseconds since
    1970-01-01 00:00:00 UTC.For more information, see Timestamp functions. | 
| UNIX_MILLIS | Converts a TIMESTAMPvalue to the number of milliseconds
    since 1970-01-01 00:00:00 UTC.For more information, see Timestamp functions. | 
| UNIX_SECONDS | Converts a TIMESTAMPvalue to the number of seconds since
    1970-01-01 00:00:00 UTC.For more information, see Timestamp functions. | 
CAST
CAST(expression AS typename)
Description
Cast syntax is used in a query to indicate that the result type of an expression should be converted to some other type.
When using CAST, a query can fail if GoogleSQL is unable to perform
the cast. If you want to protect your queries from these types of errors, you
can use SAFE_CAST.
Casts between supported types that don't successfully map from the original
value to the target domain produce runtime errors. For example, casting
BYTES to STRING where the byte sequence isn't valid UTF-8 results in a
runtime error.
Examples
The following query results in "true" if x is 1, "false" for any other
non-NULL value, and NULL if x is NULL.
CAST(x=1 AS STRING)
CAST AS ARRAY
CAST(expression AS ARRAY<element_type>)
Description
GoogleSQL supports casting to ARRAY. The
expression parameter can represent an expression for these data types:
- ARRAY
Conversion rules
| From | To | Rule(s) when casting x | 
|---|---|---|
| ARRAY | ARRAY | Must be the exact same array type. | 
CAST AS BOOL
CAST(expression AS BOOL)
Description
GoogleSQL supports casting to BOOL. The
expression parameter can represent an expression for these data types:
- INT64
- BOOL
- STRING
Conversion rules
| From | To | Rule(s) when casting x | 
|---|---|---|
| INT64 | BOOL | Returns FALSEifxis0,TRUEotherwise. | 
| STRING | BOOL | Returns TRUEifxis"true"andFALSEifxis"false"All other values of xare invalid and throw an error instead
      of casting to a boolean.A string is case-insensitive when converting to a boolean. | 
CAST AS BYTES
CAST(expression AS BYTES)
Description
GoogleSQL supports casting to BYTES. The
expression parameter can represent an expression for these data types:
- BYTES
- STRING
Conversion rules
| From | To | Rule(s) when casting x | 
|---|---|---|
| STRING | BYTES | Strings are cast to bytes using UTF-8 encoding. For example, the string "©", when cast to bytes, would become a 2-byte sequence with the hex values C2 and A9. | 
CAST AS DATE
CAST(expression AS DATE)
Description
GoogleSQL supports casting to DATE. The expression
parameter can represent an expression for these data types:
- STRING
- TIMESTAMP
Conversion rules
| From | To | Rule(s) when casting x | 
|---|---|---|
| STRING | DATE | When casting from string to date, the string must conform to the supported date literal format, and is independent of time zone. If the string expression is invalid or represents a date that's outside of the supported min/max range, then an error is produced. | 
| TIMESTAMP | DATE | Casting from a timestamp to date effectively truncates the timestamp as of the default time zone. | 
CAST AS FLOAT64
CAST(expression AS FLOAT64)
CAST(expression AS FLOAT32)
Description
GoogleSQL supports casting to floating point types.
The expression parameter can represent an expression for these data types:
- INT64
- FLOAT32
- FLOAT64
- STRING
Conversion rules
| From | To | Rule(s) when casting x | 
|---|---|---|
| INT64 | FLOAT64 | Returns a close but potentially not exact floating point value. | 
| STRING | FLOAT64 | Returns xas a floating point value, interpreting it as
      having the same form as a valid floating point literal.
      Also supports casts from"[+,-]inf"to[,-]Infinity,"[+,-]infinity"to[,-]Infinity, and"[+,-]nan"toNaN.
      Conversions are case-insensitive. | 
CAST AS INT64
CAST(expression AS INT64)
Description
GoogleSQL supports casting to integer types.
The expression parameter can represent an expression for these data types:
- INT64
- FLOAT32
- FLOAT64
- ENUM
- BOOL
- STRING
Conversion rules
| From | To | Rule(s) when casting x | 
|---|---|---|
| FLOAT64 | INT64 | Returns the closest integer value. Halfway cases such as 1.5 or -0.5 round away from zero. | 
| BOOL | INT64 | Returns 1ifxisTRUE,0otherwise. | 
| STRING | INT64 | A hex string can be cast to an integer. For example, 0x123to291or-0x123to-291. | 
Examples
If you are working with hex strings (0x123), you can cast those strings as
integers:
SELECT '0x123' as hex_value, CAST('0x123' as INT64) as hex_to_int;
/*-----------+------------*
 | hex_value | hex_to_int |
 +-----------+------------+
 | 0x123     | 291        |
 *-----------+------------*/
SELECT '-0x123' as hex_value, CAST('-0x123' as INT64) as hex_to_int;
/*-----------+------------*
 | hex_value | hex_to_int |
 +-----------+------------+
 | -0x123    | -291       |
 *-----------+------------*/
CAST AS STRING
CAST(expression AS STRING)
Description
GoogleSQL supports casting to STRING. The
expression parameter can represent an expression for these data types:
- INT64
- FLOAT32
- FLOAT64
- ENUM
- BOOL
- BYTES
- DATE
- TIMESTAMP
- STRING
Conversion rules
| From | To | Rule(s) when casting x | 
|---|---|---|
| FLOAT64 | STRING | Returns an approximate string representation. A returned NaNor0will not be signed. | 
| BOOL | STRING | Returns "true"ifxisTRUE,"false"otherwise. | 
| BYTES | STRING | Returns xinterpreted as a UTF-8 string.For example, the bytes literal b'\xc2\xa9', when cast to a string,
      is interpreted as UTF-8 and becomes the unicode character "©".An error occurs if xisn't valid UTF-8. | 
| ENUM | STRING | Returns the canonical enum value name of x.If an enum value has multiple names (aliases), the canonical name/alias for that value is used. | 
| DATE | STRING | Casting from a date type to a string is independent of time zone and is
      of the form YYYY-MM-DD. | 
| TIMESTAMP | STRING | When casting from timestamp types to string, the timestamp is interpreted using the default time zone, UTC. The number of subsecond digits produced depends on the number of trailing zeroes in the subsecond part: the CAST function will truncate zero, three, or six digits. | 
Examples
SELECT CAST(CURRENT_DATE() AS STRING) AS current_date
/*---------------*
 | current_date  |
 +---------------+
 | 2021-03-09    |
 *---------------*/
CAST AS TIMESTAMP
CAST(expression AS TIMESTAMP)
Description
GoogleSQL supports casting to TIMESTAMP. The
expression parameter can represent an expression for these data types:
- STRING
- TIMESTAMP
Conversion rules
| From | To | Rule(s) when casting x | 
|---|---|---|
| STRING | TIMESTAMP | When casting from string to a timestamp, string_expressionmust conform to the supported timestamp literal formats, or else a runtime
      error occurs. Thestring_expressionmay itself contain a
      time zone.If there is a time zone in the string_expression, that
      time zone is used for conversion, otherwise the default time zone,
      UTC, is used. If the string has fewer than six digits,
      then it's implicitly widened.An error is produced if the string_expressionis invalid,
      has more than six subsecond digits (i.e., precision greater than
      microseconds), or represents a time outside of the supported timestamp
      range. | 
| DATE | TIMESTAMP | Casting from a date to a timestamp interprets date_expressionas of midnight (start of the day) in the default time zone,
      UTC. | 
Examples
The following example casts a string-formatted timestamp as a timestamp:
SELECT CAST("2020-06-02 17:00:53.110+00:00" AS TIMESTAMP) AS as_timestamp
-- Results depend upon where this query was executed.
/*-----------------------------*
 | as_timestamp                |
 +-----------------------------+
 | 2020-06-03 00:00:53.110 UTC |
 *-----------------------------*/
SAFE_CAST
SAFE_CAST(expression AS typename)Description
When using CAST, a query can fail if GoogleSQL is unable to perform
the cast. For example, the following query generates an error:
SELECT CAST("apple" AS INT64) AS not_a_number;
If you want to protect your queries from these types of errors, you can use
SAFE_CAST. SAFE_CAST replaces runtime errors with NULLs. However, during
static analysis, impossible casts between two non-castable types still produce
an error because the query is invalid.
SELECT SAFE_CAST("apple" AS INT64) AS not_a_number;
/*--------------*
 | not_a_number |
 +--------------+
 | NULL         |
 *--------------*/
If you are casting from bytes to strings, you can also use the
function, SAFE_CONVERT_BYTES_TO_STRING. Any invalid UTF-8 characters
are replaced with the unicode replacement character, U+FFFD.