SUBSTRING é uma função de manipulação de cadeias que manipula todos os tipos de dados de cadeia (BIT, BLOB e CHARACTER) e extrai os caracteres de uma cadeia para criar outra.
>>-SUBSTRING--(--SourceExpression--+- FROM --StartPosition------+--> +- BEFORE --BeforeExpression-+ '- AFTER --AfterExpression---' >--+---------------------+--)---------------------------------->< '- FOR --StringLength-'
StartPosition
Se você especificou StartPosition, SUBSTRING retorna uma nova cadeia do mesmo tipo que SourceExpression contendo uma seqüência contígua de caracteres extraídos de SourceExpression, conforme especificado por StartPosition e StringLength. Se você não especificou StringLength, a seqüência é executada a partir de StartPosition até o final de SourceExpression. A StartPosition pode ser negativa e juntamente a StartPosition e o StringLength definem um intervalo. O resultado é a sobreposição entre este intervalo e a SourceExpression; o StringLength não pode ser menor do que o da StartPosition.
BeforeExpression
Se você especificar BeforeExpression, SUBSTRING retorna uma nova cadeia do mesmo tipo que SourceExpression contendo uma seqüência contígua de caracteres extraídos dos caracteres do StringLength antes da primeira ocorrência de BeforeExpression dentro de SourceExpression, mais do que (sem incluir) o primeiro caractere da primeira ocorrência de BeforeExpression. Se você não especificar StringLength, a seqüência de caracteres é tomada do início de SourceExpression mais do que (sem incluir) o primeiro caractere da primeira ocorrência de BeforeExpression. Se a cadeia BeforeExpression não ocorrer em SourceExpression, uma cadeia vazia (comprimento zero) será retornada.
A cadeia BeforeExpression deve ter o mesmo tipo de dados de SourceExpression.
AfterExpression
Se você especificar AfterExpression, SUBSTRING retorna uma nova cadeia do mesmo tipo de SourceExpression, contendo uma seqüência contígua de caracteres extraídos de SourceExpression, começando com o primeiro caractere após o final da primeira ocorrência de AfterExpression até o final de SourceExpression (ou caracteres StringLength, se for especificado). Se a cadeia AfterExpression não ocorrer em SourceExpression, uma cadeia vazia (comprimento zero) será retornada.
A cadeia AfterExpression deve ter o mesmo tipo de dados de SourceExpression.
Se qualquer parâmetro for NULL, o resultado será NULL. Esta não é uma cadeia de comprimento zero.
Exemplos
SUBSTRING('Hello World!' FROM 7
FOR 4)
retorna 'Worl'.SUBSTRING('Hello World!' BEFORE 'World');
retorna 'Hello
'.SUBSTRING('Hello World!' BEFORE 'World' FOR 3);
retorna 'lo
'.SUBSTRING('Hello World!' BEFORE 'e');
retorna 'H'.SUBSTRING('Hello World!' AFTER 'World');
retorna '!'.SUBSTRING('Hello World!' AFTER 'W' FOR 2);
retorna 'ou'.SUBSTRING('Hello World!' AFTER 'P');
retorna ''.