2014-06-17 8 views
10

Voglio tagliare una stringa a una lunghezza specificata. Se la stringa è più corta, non voglio fare nulla. Ho trovato una funzione substr() che fa il lavoro. Tuttavia non c'è nulla nella documentazione di Oracle che cosa succede se la stringa è più corta della lunghezza massima.Utilizzo di substr per tagliare la stringa su Oracle

Per esempio, questo:

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

restituisce 'abc', che è quello che mi serve.

Mi piacerebbe chiedere se questo è sicuro, perché la funzione non sembra essere definita per questo utilizzo. C'è un modo migliore per troncare?

+1

'SUBSTR'ing sempre sottoinsieme della stringa. Quindi non sarà mai più grande della stringa reale. –

risposta

5

Questa è una domanda interessante. Sorprendentemente, il documentation non sembra coprire questo punto in modo esplicito.

Penso che quello che stai facendo è abbastanza sicuro. substr() non sta per "aggiungere" caratteri alla fine della stringa quando la stringa è troppo corta. Sono dipeso da questo comportamento in molti database, incluso Oracle, nel tempo. Questo è il modo in cui funzioni simili funzionano in altri database e nella maggior parte delle lingue.

L'unico tipo di eccezione si verifica quando il tipo di dati originale è un tipo char() anziché varchar2(). In questo caso, la funzione restituirebbe una stringa dello stesso tipo, quindi potrebbe essere riempita di spazi. Ciò, tuttavia, è una proprietà del tipo non propriamente della funzione.

12

E 'assolutamente ok, ma se si vuole, è possibile utilizzare questa query:

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

E' meglio utilizzare la query di seguito

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

Sopra interrogazione sarebbe prendere la lunghezza la stringa o il numero 5 qualunque sia inferiore.

+0

Perché è meglio? Stai eseguendo altre 2 funzioni ... – Ben

+0

Intendevo, per essere infallibile e per essere tranquillo senza dubbi! –

2

Se si vuole essere assolutamente certi che non finirà con spazi finali utilizzando SUBSTR da solo (che non lo farai, ma a volte è confortante essere veramente sicuri) è possibile utilizzare:

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

Condividi e divertiti.

Problemi correlati