2014-06-17 2 views
10

문자열을 지정된 길이로 자릅니다. 문자열이 짧으면 아무 것도하고 싶지 않습니다. 작업을 수행하는 substr() 함수를 찾았습니다. 그러나 문자열이 최대 길이보다 짧으면 Oracle 문서에는 아무 것도 발생하지 않습니다. 내가 필요로하는 것입니다substr을 사용하여 Oracle에서 문자열 다듬기

select substr('abc',1,5) from dual; 

반환 'ABC', 예를 들어이

.

이 기능이이 용도로 정의되지 않았기 때문에 안전한 지 물어보고 싶습니다. 잘리는 방법이 더 있습니까?

+1

'SUBSTR '은 항상 String의 하위 집합입니다. 따라서 실제 String보다 커지지 마십시오. –

답변

5

이것은 흥미로운 질문입니다. 놀랍게도 documentation은이 지점을 명시 적으로 나타내지 않습니다.

당신이하고있는 일은 매우 안전하다고 생각합니다. substr()은 문자열이 너무 짧을 때 문자열의 끝에 문자를 "추가"하지 않습니다. 오라클을 비롯한 많은 데이터베이스에서이 동작에 의존했습니다. 이것은 다른 데이터베이스 및 대부분의 언어에서 유사한 기능이 작동하는 방식입니다.

원본 데이터 형식이 varchar2() 형식이 아닌 char() 일 경우 예외가 될 수 있습니다. 이 경우 함수는 동일한 유형의 문자열을 반환하므로 공백으로 채워질 수 있습니다. 하지만 실제로는 기능이 아닌 유형의 속성입니다.

12

그것은 완전히 좋아하지만, 당신이 원한다면, 당신은이 쿼리를 사용할 수 있습니다

select substr('abc',1,least(5,length('abc'))) from dual; 
3

그것의 길이를 취할 것 중 아래의 쿼리를 쿼리 위

SELECT SUBSTR('abc',1,LEAST(5,LENGTH('abc'))) FROM DUAL; 

를 사용하는 것이 좋습니다를 문자열 또는 숫자 5 중 낮은 쪽.

+0

더 나은 이유는 무엇입니까? 당신은 2 개의 더 많은 기능을 실행하고 있습니다 ... – Ben

+0

나는 바보가 아니며 의심없이 안심할 수 있다는 것을 의미했습니다! –

2

당신은 혼자 SUBSTR을 사용하여 후행 공백으로 끝낼하지 않을 것이라는 확신되고 싶어 (당신은하지 않습니다,하지만 때로는 정말 확실 위안입니다) 당신이 사용할 수있는 경우 :

SELECT RTRIM(SUBSTR('abc',1,5)) FROM DUAL; 

을 공유하고 즐기십시오.

관련 문제