HANA Sqlscript中的T-SQL ISNUMERIC功能相当于什么?

时间:2014-12-30 10:18:51

标签: sql sql-scripts hana

我有一个要求,我需要将所有SQL Server存储过程转换为HANA存储过程。我在T-SQL中遇到过一个函数ISNUMERIC,我在HANA中没有得到它的等价物。

在搜索网络后,我发现HANA没有内置的ISNUMERIC等效功能。然后我尝试编写自己的函数来实现这一点,并且我坚持使用错误处理和正则表达式限制。

我的HANA版本是70。

3 个答案:

答案 0 :(得分:3)

SAP HANA没有ISNUMERIC()功能。 但是,这个问题已在SCN上被多次询问和回答: 例如。 http://scn.sap.com/thread/3449615

或者我以后的做法: http://scn.sap.com/thread/3638673

drop function isnumeric;
create function isNumeric( IN checkString NVARCHAR(64))
returns isNumeric integer
language SQLSCRIPT as
begin
declare tmp_string nvarchar(64) := :checkString;
declare empty_string nvarchar(1) :='';

/* replace all numbers with the empty string */
tmp_string := replace (:tmp_string, '1', :empty_string);
tmp_string := replace (:tmp_string, '2', :empty_string);
tmp_string := replace (:tmp_string, '3', :empty_string);
tmp_string := replace (:tmp_string, '4', :empty_string);
tmp_string := replace (:tmp_string, '5', :empty_string);
tmp_string := replace (:tmp_string, '6', :empty_string);
tmp_string := replace (:tmp_string, '7', :empty_string);
tmp_string := replace (:tmp_string, '8', :empty_string);
tmp_string := replace (:tmp_string, '9', :empty_string);
tmp_string := replace (:tmp_string, '0', :empty_string);

/*if the remaining string is not empty, it must contain non-number characters */
if length(:tmp_string)>0 then
    isNumeric := 0;
else  
    isNumeric := 1;
end if;

end;

测试显示:     数据为(选择'1blablupp'作为来自虚拟的VAL                    union all选择'1234'作为来自dummy的VAL                    union all选择'bla123'作为假的val)

select val, isNumeric(val)  from data 

VAL         ISNUMERIC(VAL)
1blablupp   0            
1234        1            
bla123      0   

答案 1 :(得分:0)

此解决方案应涵盖真正所有可转换为数字的字符串

PROCEDURE "SCHEMA"."package::IS_NUMERIC" ( 
        in stringToCheck nvarchar(5000)
        ,out isNumeric integer 
) 
    LANGUAGE SQLSCRIPT
    SQL SECURITY INVOKER 
    --DEFAULT SCHEMA <default_schema_name>
    READS SQL DATA AS
BEGIN

DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
    isNumeric := 0;
END;

select cast(:stringToCheck as double) from dummy; 

isNumeric := 1;

END;

e.g。 还涵盖call "SCHEMA"."package::IS_NUMERIC"('-12.345', ?)

答案 2 :(得分:0)

从SAP HANA 1.0 SPS12中,您可以在SQL中使用正则表达式。您可以使用LIKE_REGEXPR函数检查特定字符串是否包含字母,即:

SELECT 
  CASE WHEN '0001A' LIKE_REGEXPR '[A-Z]' THEN 0 ELSE 1 END 
FROM 
  DUMMY;