2014-09-19 59 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

相關問題