2014-09-19 3 views
-1

문자열/varchar가 숫자로 변환 될 수 있는지 확인하는 HQL을 작성해야합니다. 그렇다면 null을 반환하지 않으면 변환해야합니다. 이 변환 된 숫자가 일부 데이터를 계산하는 데 사용되므로이 작업을 수행해야합니다. 다음과 같이 표시되어야합니다 :HQL - 문자열이 숫자로 변환 될 수 있는지 확인하십시오.

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

어떻게하면 hql을 사용할 수 있습니까?

+1

r 정규식을 사용하면 어떨까요? –

답변

1

모든 10 진수가 아닌 문자를 대체하고 정수로 캐스팅하려고합니다. 그것은 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

이것은 매우 포스트그레스에 의존합니다. –

+0

네,하지만 다른 RDBMS에서는 동일하지 않으면 매우 유사해야합니다. –

관련 문제