diff --git a/sqlglot/dialects/snowflake.py b/sqlglot/dialects/snowflake.py index 4561a1bf5d..32e0b55464 100644 --- a/sqlglot/dialects/snowflake.py +++ b/sqlglot/dialects/snowflake.py @@ -434,6 +434,7 @@ class Parser(parser.Parser): "GET_PATH": lambda args, dialect: exp.JSONExtract( this=seq_get(args, 0), expression=dialect.to_json_path(seq_get(args, 1)) ), + "HEX_DECODE_BINARY": exp.Unhex.from_arg_list, "IFF": exp.If.from_arg_list, "LAST_DAY": lambda args: exp.LastDay( this=seq_get(args, 0), unit=map_date_part(seq_get(args, 1)) @@ -1030,6 +1031,7 @@ class Generator(generator.Generator): exp.TsOrDsToTime: lambda self, e: self.func( "TRY_TO_TIME" if e.args.get("safe") else "TO_TIME", e.this, self.format_time(e) ), + exp.Unhex: rename_func("HEX_DECODE_BINARY"), exp.UnixToTime: rename_func("TO_TIMESTAMP"), exp.Uuid: rename_func("UUID_STRING"), exp.VarMap: lambda self, e: var_map_sql(self, e, "OBJECT_CONSTRUCT"), diff --git a/tests/dialects/test_snowflake.py b/tests/dialects/test_snowflake.py index a4b252fab6..a21dc4db0b 100644 --- a/tests/dialects/test_snowflake.py +++ b/tests/dialects/test_snowflake.py @@ -998,6 +998,15 @@ def test_snowflake(self): self.validate_identity("CREATE TABLE t (id INT PRIMARY KEY AUTOINCREMENT)") + self.validate_all( + "SELECT HEX_DECODE_BINARY('65')", + write={ + "bigquery": "SELECT FROM_HEX('65')", + "duckdb": "SELECT UNHEX('65')", + "snowflake": "SELECT HEX_DECODE_BINARY('65')", + }, + ) + def test_null_treatment(self): self.validate_all( r"SELECT FIRST_VALUE(TABLE1.COLUMN1) OVER (PARTITION BY RANDOM_COLUMN1, RANDOM_COLUMN2 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS MY_ALIAS FROM TABLE1",