SAP HANA Эквивалентная логика для Try_Cast - PullRequest
1 голос
/ 12 апреля 2019

В SQL Server у вас есть функция под названием Try_Cast.https://docs.microsoft.com/en-us/sql/t-sql/functions/try-cast-transact-sql?view=sql-server-2017

Мне нравится, что вы можете поместить это в оператор Case:

SELECT   
CASE WHEN TRY_CAST('test' AS float) IS NULL   
THEN 'Cast failed'  
ELSE 'Cast succeeded'  
END AS Result;  

Мне нужна такая же логика в SAP HANA.

Любые идеи

1 Ответ

2 голосов
/ 16 апреля 2019

Насколько мне известно, у HANA нет эквивалента. Если у вас есть конкретные приведения (например, из nvarchar в float), вы можете создать свою собственную скалярную функцию для обработки «try cast» с помощью обработчика выхода, который проверяет соответствующий код ошибки sql преобразования типов данных.

Для nvarchar с плавающей точкой эта функция может выглядеть следующим образом:

FUNCTION "try_cast_nvarchar_2_float" ( i_value nvarchar(5000) ) 
RETURNS e_result float
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER AS 
BEGIN
  DECLARE EXIT HANDLER FOR SQL_ERROR_CODE 339
    e_result = null;

  e_result = cast(i_value as float);
END;

Эта функция может быть использована в простом sql; с выражением case тоже как в вашем примере:

SELECT 
  "try_cast_nvarchar_2_float"('10.34) AS casted_value,
  CASE
    WHEN "try_cast_nvarchar_2_float"(:lv_value) IS NULL
    THEN 'Cast failed'
    ELSE 'Cast succeeded'
  END AS cast_result
FROM dummy;
...