HQL - 检查字符串是否可以转换为数字

时间:2014-09-19 09:31:46

标签: hibernate hql

我需要编写HQL,它将检查string / varchar是否可以转换为数字,如果是,则应该转换,如果不返回null。我需要这样做,因为这个转换后的数字将用于计算一些数据。它应该是这样的:

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

我怎样才能使用hql?

1 个答案:

答案 0 :(得分: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并注册此功能。 E.g:

public class CustomPostgresSqlDialect extends PostgreSQL82Dialect {

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