Dylan He created FLINK-36025: -------------------------------- Summary: Add TO_NUMBER function Key: FLINK-36025 URL: https://issues.apache.org/jira/browse/FLINK-36025 Project: Flink Issue Type: Sub-task Components: Table SQL / API Reporter: Dylan He
Add TO_NUMBER function. ---- Returns {{expr}} cast to DECIMAL using formatting {{fmt}}. Example: {code:sql} -- The format expects: -- * an optional sign at the beginning, -- * followed by a dollar sign, -- * followed by a number between 3 and 6 digits long, -- * thousands separators, -- * up to two dight beyond the decimal point. > SELECT to_number('-$12,345.67', 'S$999,099.99'); -12345.67 -- Plus is optional, and so are fractional digits. > SELECT to_number('$345', 'S$999,099.99'); 345.00 -- The format requires at least three digits. > SELECT to_number('$45', 'S$999,099.99'); Error: Invalid number -- The format requires at least three digits. > SELECT try_to_number('$45', 'S$999,099.99'); NULL -- The format requires at least three digits > SELECT to_number('$045', 'S$999,099.99'); 45.00 -- Using brackets to denote negative values > SELECT to_number('<1234>', '999999PR'); -1234 {code} Syntax: {code:sql} TO_NUMBER(expr, fmt) fmt { ' [ MI | S ] [ L | $ ] [ 0 | 9 | G | , ] [...] [ . | D ] [ 0 | 9 ] [...] [ L | $ ] [ PR | MI | S ] ' } {code} Arguments: * {{expr}}: A STRING expression representing a number. {{expr}} may include leading or trailing spaces. * {{fmt}}: A STRING literal, specifying the expected format of {{expr}}. Returns: A DECIMAL(p, s) where p is the total number of digits (0 or 9) and s is the number of digits after the decimal point, or 0 if there is none. ---- {{fmt}} can contain the following elements (case insensitive): - 0 or 9 Specifies an expected digit between 0 and 9. A 0 to the left of the decimal points indicates that {{expr}} must have at least as many digits. Leading 9 indicate that {{expr}} may omit these digits. {{expr}} must not be larger that the number of digits to the left of the decimal point allows. Digits to the right of the decimal indicate the most digits {{expr}} may have to the right of the decimal point than {{fmt}} specifies. - . or D Specifies the position of the decimal point. {{expr}} does not need to include a decimal point. - , or G Specifies the position of the , grouping (thousands) separator. There must be a 0 or 9 to the left and right of each grouping separator. {{expr}} must match the grouping separator relevant to the size of the number. - L or $ Specifies the location of the $ currency sign. This character may only be specified once. - S or MI Specifies the position of an optional ‘+’ or ‘-‘ sign for S, and ‘-‘ only for MI. This directive may be specified only once. - PR Only allowed at the end of the format string; specifies that {{expr}} indicates a negative number with wrapping angled brackets (<1>). If {{expr}} contains any characters other than 0 through 9, or characters permitted in {{fmt}}, an error is returned. See also: * [Spark|https://spark.apache.org/docs/3.5.1/sql-ref-functions-builtin.html#string-functions] * [Databricks|https://docs.databricks.com/en/sql/language-manual/functions/to_number.html] * [Snowflake|https://docs.snowflake.com/en/sql-reference/functions/to_decimal] -- This message was sent by Atlassian Jira (v8.20.10#820010)