我需要編寫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