我需要编写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?
答案 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());
}
}