开发者问题收集

雪花函数创建

2021-10-05
309

我正尝试通过创建一个函数在 Snowflake 中实现以下功能

Declare
@test VarBinary(518)=0x00E70001010800084100470047004200 
Select Case 
When SubString(@test, 1, 3) = 0x00E700 Then CAST(SubString(@test, 9, 510) As NVarchar(255)) 
When SubString(@test, 1, 3) = 0x00A700 Then CAST(SubString(@test, 9, 510) As Varchar(510)) 
When SubString(@test, 1, 3) = 0x01E700 Then CAST(SubString(@test, 9, CAST(SubString(@test, 6, 1) As Int)) As NVarchar(64)) 
Else Null 
End 

上述代码在 mssql 中运行,但我尝试无法在 Snowflake 中创建一个函数。

如何在 Snowflake 中创建该函数?

1个回答

以下示例可能会有所帮助:

CREATE OR REPLACE FUNCTION MMfGetPropValChar(p1 varbinary)
RETURNS varchar
as
$$
  select 
    CASE
      WHEN substr(p1::varchar, 1, 3) = '0x00E700' 
         then substr(p1::varchar, 9, 510)::varchar
      WHEN substr(p1::varchar, 1, 3) = '0x01E700' 
         then substr(p1::varchar, 9, substr(p1::varchar, 6, 1))::varchar
   ELSE current_timestamp()::varchar
   End as test
$$
;


SELECT MMfGetPropValChar(to_binary(hex_encode('Snowflake'), 'HEX')) as res;

RES
2021-10-05 05:14:52.369 -0700

注意:我使用 :: 符号转换为 varchars,只是为了使 SQL 更易于阅读。

Rich Murnane
2021-10-05