2014-09-19 36 views
-1

我需要编写HQL来检查字符串/ varchar是否可以转换为数字,如果是,则应该转换,如果不应该返回空值。我需要这样做,因为这个转换后的数字将被用来计算一些数据。它应该看起来像这样:HQL - 检查字符串是否可以转换为数字

... CASE WHEN can_be_converted_to_number(p.someString) THEN CAST(p.someString as NUMBER) ELSE NULL END as someNumber 

我该如何使用hql?

+1

如何在rlike中使用正则表达式? – 2014-09-19 09:37:13

回答

1

它替换所有非十进制字符并尝试转换为整数。它是pl/pgSql函数。

CREATE OR REPLACE FUNCTION extract_number(text varchar) RETURNS int AS $BODY$ 
    BEGIN 
     text := regexp_replace(text, '[^0-9]+',''); 
     RETURN CAST(text as int); 
     EXCEPTION WHEN others THEN 
     RETURN NULL; 
END; 
$BODY$ 
    LANGUAGE plpgsql IMMUTABLE; 

如果你想在HQL中使用这个函数,你必须扩展你的Dialect并注册这个函数。例如:

public class CustomPostgresSqlDialect extends PostgreSQL82Dialect { 

    public CustomPostgresSqlDialect(){ 
     super(); 
     registerFunction("extract_number", new ExtractNumberFunction()); 
    } 
} 
+0

这是非常Postgres依赖 – 2014-09-19 11:30:41

+0

是的,但在其他RDBMS它应该是非常相似,如果不相同。 – 2014-09-19 12:47:23

相关问题