# PostgreSQL Prático/Funções Internas/Strings
## 5.1 – Funções de Strings

Concatenação de Strings - dois || (pipes)
SELECT 'ae' || 'io' || 'u' AS vogais; --vogais -------- aeiou
SELECT CHR(67)||CHR(65)||CHR(84) AS "Dog"; -- Dog CAT
Quantidade de Caracteres de String
char_length - retorna o número de caracteres
SELECT CHAR_LENGTH('UNIFOR'); - -Retorna 6
Ou SELECT LENGTH('Database'); - - Retorna 8
Converter para minúsculas
SELECT LOWER('UNIFOR');
Converter para maiúsculas
SELECT UPPER('universidade');
Posição de caractere
SELECT POSITION ('@' IN 'ribafs@gmail.com'); -- Retorna 7
Ou SELECT STRPOS('Ribamar' ,'mar'); - - Retorna 5
Substring
SUBSTRING(string [FROM inteiro] [FOR inteiro])
SELECT SUBSTRING ('Ribamar FS' FROM 9 FOR 10); - - Retorna FS
SUBSTRING(string FROM padrão);
SELECT SUBSTRING ('PostgreSQL' FROM '.......'); - - Retorna Postgre
SELECT SUBSTRING ('PostgreSQL' FROM '...$'); - -Retorna SQL
Primeiros ....... e últimos ...$
Ou
SUBSTR ( 'string', inicio, quantidade);
SELECT SUBSTR ('Ribamar', 4, 3); - - Retorna mar
Substituir todos os caracteres semelhantes
SELECT TRANSLATE(string, velho, novo);
SELECT TRANSLATE('Brasil', 'il', 'ão'); - - Retorna Brasão
SELECT TRANSLATE('Brasileiro', 'eiro', 'eira');
Remover Espaços de Strings
SELECT TRIM(' SQL - PADRÃO ');
Calcular MD5 de String
SELECT MD5('ribafs'); - - Retorna 53cd5b2af18063bea8ddc804b21341d1
Repetir uma string n vezes
SELECT REPEAT('SQL-', 3); - - Retorna SQL-SQL-SQL-
Sobrescrever substring em string
SELECT REPLACE ('Postgresql', 'sql', 'SQL'); - - Retorna PostgreSQL
Dividir Cadeia de Caracteres com Delimitador
SELECT SPLIT_PART( 'PostgreSQL', 'gre', 2); - -Retorna SQL
SELECT SPLIT_PART( 'PostgreSQL', 'gre', 1); - -Retorna Post
<------gre----->
Iniciais Maiúsculas
INITCAP(text) - INITCAP ('olá mundo') - - Olá Mundo
Remover Espaços em Branco
TRIM ([leading | trailing | both] [characters] from string)- remove caracteres da direita e da esquerda. trim (both 'b' from 'babacatebbbb'); - - abacate
RTRIM (string text, chars text) - Remove os caracteres chars da direita (default é espaço)
rtrim('removarrrr', 'r') - - remova
LTRIM - (string text, chars text) - Remove os caracteres chars da esquerda
ltrim('abssssremova', 'abs') - - remova
Detalhes no item 9.4 do Manual:
http://pgdocptbr.sourceforge.net/pg80/functions-string.html
Like e %
SELECT * FROM FRIENDS WHERE LASTNAME LIKE 'M%';
O ILIKE é case INsensitive e o LIKE case sensitive.
~~ equivale ao LIKE
~~* equivale equivale ao ILIKE
!~~ equivale ao NOT LIKE
!~~* equivale equivale ao NOT ILIKE
... LIKE '[4-6]_6%' -- Pegar o primeiro sendo de 4 a 6,
-- o segundo qualquer dígito,
-- o terceiro sendo 6 e os demais quaisquer
% similar a *
_ similar a ? (de arquivos no DOS)
Correspondência com um Padrão
O PostgreSQL disponibiliza três abordagens distintas para correspondência com padrão: o operador LIKE tradicional do SQL; o operador mais recente SIMILAR TO (adicionado ao SQL:1999); e as expressões regulares no estilo POSIX. Além disso, também está disponível a função de correspondência com padrão substring, que utiliza expressões regulares tanto no estilo SIMILAR TO quanto no estilo POSIX.
SELECT substring('XY1234Z', 'Y*([0-9]{1,3})'); - - Resultado: 123
SELECT substring('XY1234Z', 'Y*?([0-9]{1,3})'); - - Resultado: 1
SIMILAR TO
O operador SIMILAR TO retorna verdade ou falso conforme o padrão corresponda ou não à cadeia de caracteres fornecida. Este operador é muito semelhante ao LIKE, exceto por interpretar o padrão utilizando a definição de expressão regular do padrão SQL.
'abc' SIMILAR TO 'abc' verdade
'abc' SIMILAR TO 'a' falso
'abc' SIMILAR TO '%(b|d)%' verdade
'abc' SIMILAR TO '(b|c)%' falso
SELECT 'abc' SIMILAR TO '%(b|d)%'; -- Procura b ou d em 'abc' e no caso retorna TRUE
REGEXP
SELECT 'abc' ~ '.*ab.*';
~ distingue a de A
~* não distingue a de A
!~ distingue expressões distingue a de A
!~* distingue expressões não distingue a de A
'abc' ~ 'abc' -- TRUE
'abc' ~ '^a' -- TRUE
'abc' ~ '(b|j)' -- TRUE
'abc' ~ '^(b|c)' -- FALSE