我需要编写HQL来检查字符串/ varchar是否可以转换为数字,如果是,则应该转换,如果不应该返回空值。我需要这样做,因为这个转换后的数字将被用来计算一些数据。它应该看起来像这样:HQL - 检查字符串是否可以转换为数字
... CASE WHEN can_be_converted_to_number(p.someString) THEN CAST(p.someString as NUMBER) ELSE NULL END as someNumber
我该如何使用hql?
我需要编写HQL来检查字符串/ varchar是否可以转换为数字,如果是,则应该转换,如果不应该返回空值。我需要这样做,因为这个转换后的数字将被用来计算一些数据。它应该看起来像这样:HQL - 检查字符串是否可以转换为数字
... CASE WHEN can_be_converted_to_number(p.someString) THEN CAST(p.someString as NUMBER) ELSE NULL END as someNumber
我该如何使用hql?
它替换所有非十进制字符并尝试转换为整数。它是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());
}
}
这是非常Postgres依赖 – 2014-09-19 11:30:41
是的,但在其他RDBMS它应该是非常相似,如果不相同。 – 2014-09-19 12:47:23
如何在rlike中使用正则表达式? – 2014-09-19 09:37:13