<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>glufke.net &#187; String</title>
	<atom:link href="http://glufke.net/tag/string/feed/" rel="self" type="application/rss+xml" />
	<link>http://glufke.net</link>
	<description></description>
	<lastBuildDate>Wed, 30 Nov 2011 17:41:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Trabalhando com Strings no Oracle</title>
		<link>http://glufke.net/2009/06/03/trabalhando-com-strings-no-oracle/</link>
		<comments>http://glufke.net/2009/06/03/trabalhando-com-strings-no-oracle/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 01:36:11 +0000</pubDate>
		<dc:creator>Rodrigo Valentim</dc:creator>
				<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[String]]></category>

		<guid isPermaLink="false">http://glufke.net/?p=96</guid>
		<description><![CDATA[Vou agora tentar mostrar como trabalha com string no Oracle&#8230; Venho acompanhando alguns Foruns de Desenvolvimento e sempre estou me deparando com questões sobre o correto uso de funções para trabalhar com String&#8230; 

Concatenando 2 Strings
Colocando a primeira letra do texto como Maiúscula
Transformando o texto em texto Minúsculo e Maiúsculo
Convertendo letras em códigos ASCII
Localizando a [...]]]></description>
			<content:encoded><![CDATA[<p>Vou agora tentar mostrar como trabalha com string no Oracle&#8230; Venho acompanhando alguns Foruns de Desenvolvimento e sempre estou me deparando com questões sobre o correto uso de funções para trabalhar com String&#8230; </p>
<ol>
<li>Concatenando 2 Strings</li>
<li>Colocando a primeira letra do texto como Maiúscula</li>
<li>Transformando o texto em texto Minúsculo e Maiúsculo</li>
<li>Convertendo letras em códigos ASCII</li>
<li>Localizando a posição uma string no meio do texto</li>
<li>Atribuindo dígitos no final e/ou no inicio do texto</li>
<li>Removendo espaços no inicio e/ou fim do texto</li>
<li>Como inverter o texto</li>
<li>Substituindo Strings por outras Strings</li>
<li>Cortando o conteúdo do texto</li>
<li>Descobrindo o tamanho da string</li>
<li>Retornando colunas com valor não nulo</li>
<li>Exemplo da utilização de algumas funções
<ul>
<li>Pesquisando em uma string por um digito e exibindo o resto da string pegando como base esse digito localizado.</li>
<li>Repartindo uma string e inserindo um valor no meio.</li>
</ul>
</li>
</ol>
<p><span id="more-96"></span>
<div id="ads_336x280"><script type="text/javascript"><!--
google_ad_client = "pub-8964513116661040";
google_alternate_color = "ffffFF";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
//2007-09-07: wp_quadrado_gra
google_ad_channel = "0247072216";
google_color_border = "FFFFFF";
google_color_bg = "FFFFff";
google_color_link = "4F82CB";
google_color_text = "000000";
google_color_url = "4F82CB";
//-->
</script><script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p><strong>1. Concatenando 2 strings</strong></p>
<p>Existem duas formas de trabalhar concatenando strings.  CONCAT e PIPE<br />
Concat: </p>
<pre class="brush: sql;">SQL: SELECT CONCAT ('Rodrigo ', 'Valentim') FROM dual;
CONCAT('RODRIGO','VALENTIM')
----------------------------
Rodrigo Valentim
</pre>
<p>Usando PIPE: </p>
<pre class="brush: sql;">SQL: SELECT 'Rodrigo '||'Valentim' FROM dual;
'RODRIGO'||'VALENTIM'
---------------------
Rodrigo Valentim
</pre>
<p><strong>2. Colocando a primeira letra do texto como Maiúscula.<br />
</strong>
<pre class="brush: sql;">SQL: SELECT INITCAP('rodrigo valentim') FROM dual;
INITCAP('RODRIGOVALENTIM')
--------------------------
Rodrigo Valentim
</pre>
<p><strong>3. Alternar entre Maiúscula e Minúscula</strong></p>
<pre class="brush: sql;">SQL: SELECT LOWER('RODRIGO ')||UPPER('valentim') FROM dual;
LOWER('RODRIGO')||UPPER('VALEN
------------------------------
rodrigo VALENTIM
</pre>
<p><strong>4. Convertendo letras em códigos ASCII</strong></p>
<pre class="brush: sql;">SQL: SELECT ASCII('A') FROM dual;
ASCII('A')
----------
65

SQL: SELECT ASCII('Z') FROM dual;
ASCII('Z')
----------
90

SQL: SELECT ASCII('a') FROM dual;
ASCII('A')
----------
97

SQL: SELECT ASCII('z') FROM dual;
ASCII('Z')
----------
122

SQL: SELECT ASCII(' ') FROM dual;
ASCII('')
----------
32
</pre>
<p><strong>5. Localizando a posição uma string no meio do texto</strong><br />
Com a função INSTR, é possível localizar caracteres dentro de um texto, de forma normal ou inversa.</p>
<p>Localizando a primeira posição da string no texto</p>
<pre class="brush: sql;">
SQL: SELECT INSTR('Exemplo de como realizar pesquisa em uma string', 'r', 1, 1) localiza_1 from dual;
LOCALIZA_1
----------
17
</pre>
<p>Localizando a segunda posição da string no texto</p>
<pre class="brush: sql;">SQL: SELECT INSTR('Exemplo de como realizar pesquisa em uma string', 'r', 1, 2) localiza_2 from dual;
LOCALIZA_2
----------
24
</pre>
<p>Localizando a terceira posição da string no texto</p>
<pre class="brush: sql;">SQL: SELECT INSTR('Exemplo de como realizar pesquisa em uma string', 'r', 1, 3) localiza_3 from dual;
LOCALIZA_3
----------
44
</pre>
<p>Localizando a quarta posição da string no texto, como não existe mais de 3 letras r no texto, ele retorna zero.</p>
<pre class="brush: sql;">SQL: SELECT INSTR('Exemplo de como realizar pesquisa em uma string', 'r', 1, 4) localiza_4 from dual;
LOCALIZA_4
----------
0
</pre>
<p>Para realizar a mesma pesquisa so que de ordem inversa, basta usar o valor negativo na função</p>
<pre class="brush: sql;">SQL: SELECT INSTR('Exemplo de como realizar pesquisa em uma string', 'r', -1, 1) localiza_1 from dual;
LOCALIZA_1
----------
44
</pre>
<p>Nestas condições, ele me retorna a primeira posição na ordem inversa, ou seja, a última.</p>
<p><strong>6. Atribuindo dígitos no final e/ou no inicio do texto.</strong><br />
Temos como usar o LPAD para inserir digitos na esquerda e RPAD para inserir digitos na direita.<br />
LPAD:</p>
<pre class="brush: sql;">SQL: SELECT LPAD('Rodrigo Valentim', 25, 'x') FROM dual;
LPAD('RODRIGOVALENTIM',25,'X')
------------------------------
xxxxxxxxxRodrigo Valentim
</pre>
<p>RPAD:
<pre class="brush: sql;">SQL: SELECT RPAD('Rodrigo Valentim', 25, 'x') FROM dual;
RPAD('RODRIGOVALENTIM',25,'X')
------------------------------
Rodrigo Valentimxxxxxxxxx
</pre>
<p><strong>7.Removendo dígitos do inicio ou do fim ou de ambos do texto</strong><br />
Podendo ser espaços em branco ou letras (TRIM só remove espaços em branco).<br />
LTRIM:</p>
<pre class="brush: sql;">SQL: SELECT '*' || LTRIM('               Rodrigo Valentim               ') || '*' FROM dual;
'*'||LTRIM('RODRIGOVALENTIM')|
---------------------------------
*Rodrigo Valentim               *
</pre>
<p>RTRIM:</p>
<pre class="brush: sql;">SQL: SELECT '*' || RTRIM('               Rodrigo Valentim               ') || '*' FROM dual;
'*'||RTRIM('RODRIGOVALENTIM')|
---------------------------------
*               Rodrigo Valentim*
</pre>
<p>TRIM:
<pre class="brush: sql;">SQL: SELECT '*'||TRIM('   Rodrigo Valentim   ')||'*' FROM dual;
'*'||TRIM('RODRIGOVALENTIM')||
------------------------------
*Rodrigo Valentim*
</pre>
<p><strong>8. Como inverter o conteúdo em uma string</strong></p>
<pre class="brush: sql;">SQL: select reverse('MITNELAV OGIRDOR') from dual;
REVERSE('MITNELAVOGIRDOR')
--------------------------
RODRIGO VALENTIM
</pre>
<p><strong>9. Substituindo Strings por outras Strings</strong><br />
Com a Função Replace é possível substituir o conjunto de caracteres por outro, no exemplo abaixo, ele vai alterar o valor DE para A</p>
<pre class="brush: sql;">SQL: SELECT REPLACE('ABCDE','DE','A') FROM dual;
REPLACE('ABCDE','DE','A')
-------------------------
ABCA
</pre>
<p><strong>10. Cortando conteúdo do texto com SUBSTR<br />
</strong>Com essa função, é possível exibir somente partes do texto. No exemplo abaixo, digo que quero iniciar meu texto da posição 3 e andar mais 9 dígitos.</p>
<pre class="brush: sql;">SQL: SELECT SUBSTR('Rodrigo Valentim', 3, 9) FIRST_FOUR FROM dual;
FIRST_FOUR
----------
drigo Val
</pre>
<p><strong>11. Descobrindo o tamanho da string com a função LENGTH.</strong></p>
<pre class="brush: sql;">SQL: SELECT LENGTH('Rodrigo Valentim') FROM dual;
LENGTH('RODRIGOVALENTIM')
-------------------------
16
</pre>
<p><strong>12. Retornando colunas com valor não nulo</strong><br />
Com a função COALESCE. Ela pesquisa entre as colunas passada e retorna o primeiro valor não nulo que foi encontrado.</p>
<pre class="brush: sql;">SQL: create table artigo_coalesce(col1 varchar2(10), col2 varchar2(10), col3 varchar2(10), col4 varchar2(10));
Table created
</pre>
<pre class="brush: sql;">
SQL: insert into artigo_coalesce values (NULL, NULL, 'C','D');
1 row inserted
SQL: insert into artigo_coalesce values (NULL, 'A', 'C','D');
1 row inserted
SQL: insert into artigo_coalesce values ('B', 'A', 'C','D');
1 row inserted
SQL: insert into artigo_coalesce values (NULL, 'D', NULL,'A');
1 row inserted
SQL: SELECT COALESCE(COL1, COL2, COL3, COL4) FROM artigo_coalesce;
COALESCE(COL1,COL2,COL3,COL4)
-----------------------------
C
A
B
D
</pre>
<p><strong>13.1 Pesquisando em uma string por um digito e exibindo o resto</strong><br />
Pesquisando em uma string por um digito e exibindo o resto da string pegando como base esse digito localizado. Bom, primeiro preciso saber qual a posição que preciso começar, neste caso, vou iniciar pela &#8216;\&#8217;. Vou pesquisar do fim para o inicio e localizar neste caso, a localização da ultima barra.</p>
<pre class="brush: sql;">SQL: select INSTR('c:\arquivo\arquivo.txt', '\', -1, 1) from dual;
INSTR('C:\ARQUIVO\ARQUIVO.TXT'
------------------------------
11
</pre>
<p>Depois de localizar, preciso então usar ela como ponto inicial e ir até o final da string completa. Como não sei o tamanho total da minha string, pois, pode ser que ela mude algum dia, vou usar a função LENGTH que me retornará o tamanho total.</p>
<pre class="brush: sql;">SQL: SELECT substr('c:\arquivo\arquivo.txt',INSTR('c:\arquivo\arquivo.txt', '\', -1, 1) ,length('c:\arquivo\arquivo.txt')) from dual;
SUBSTR('C:\ARQUIVO\ARQUIVO.TXT
------------------------------
\arquivo.txt
</pre>
<p>Depois de localizar o inicio e fim da minha string através das funções acima, preciso ajustar para que a barra não saia&#8230; a função SUBSTR está iniciando da posição 11 e indo até a posição final da string, por isso está me retornando a barra, então, preciso somar + 1 ao retorno da localização da &#8216;\&#8217;, para então ela não aparecer no meu resutlado.</p>
<pre class="brush: sql;">SQL: SELECT substr('c:\arquivo\arquivo.txt',INSTR('c:\arquivo\arquivo.txt', '\', -1, 1) + 1 ,length('c:\arquivo\arquivo.txt')) from dual;
SUBSTR('C:\ARQUIVO\ARQUIVO.TXT
------------------------------
arquivo.txt
</pre>
<p>Então, andando da posição 12 até a ultima posição, consigo através do substr cortar parte do texto e extrair somente o que desejo.</p>
<p><strong>13.2 Pegar uma String e inserir um valor no meio dela</strong><br />
Eu tenho uma String chamada &#8216;Existe Perfeita?&#8217; e quero inserir o Lógica no meio dela utilizando uma query&#8230;</p>
<p>Pegando trechos do ultimo exemplo (13.1) vamos montar nossa query e assim ter nosso retorno&#8230;</p>
<p>Primeiro preciso pegar o espaço em branco, levando em consideração que é o meio da string.</p>
<pre class="brush: sql;">SQL: SELECT instr('Existe Perfeita?',' ') FROM dual;
INSTR('EXISTEPERFEITA?','')
---------------------------
7
</pre>
<p>Agora vamos cortar somente o inicio da string, com SUBSTR vamos pegar da posição 1 até o espaço em branco (posição 7)</p>
<pre class="brush: sql;">SQL: SELECT substr('Existe Perfeita?',1,instr('Existe Perfeita?',' ')) FROM dual;
SUBSTR('EXISTEPERFEITA?',1,INS
------------------------------
Existe
</pre>
<p>Temos então somente o Existe. Vamos então inserir (concatenar) o texto que queremos e ter como resultado o Existe Lógica</p>
<pre class="brush: sql;">SQL: SELECT substr('Existe Perfeita?',1,instr('Existe Perfeita?',' '))||'Lógica' FROM dual;
SUBSTR('EXISTEPERFEITA?',1,INS
------------------------------
Existe Lógica
</pre>
<p>Agora falta inserir a parte final&#8230; vamos então pegar a String inicial e então cortar a parte do meio até o fim. Já sei qual o meio e para descobrir o fim é só usar a função LENGTH e então temos o resultado que queremos.</p>
<pre class="brush: sql;">SQL: SELECT substr('Existe Perfeita?',1,instr('Existe Perfeita?',' '))||'Logica'||substr('Existe Perfeita?',instr('Existe Perfeita?',' '),length('Existe Perfeita?')) "Existe?" FROM dual;
Existe?
-----------------------
Existe Logica Perfeita?
</pre>
<p>Acredito que tenha conseguido passar um pouco do que é trabalhar com Strings no Oracle&#8230;</p>
<p>Espero ter esclarecido algumas dúvidas e as que não foram esclarecidas, podem me procurar que eu vou tentar ajudar!</p>
<p>Abraço e até a próxima.</p>
<p><em>Rodrigo Valentim é Analista de Sistemas Oracle Developer</em><br />
<a href="http://www.rodrigovalentim.com/blog">http://www.rodrigovalentim.com/blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2009/06/03/trabalhando-com-strings-no-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transformar linhas do SQL em string delimitada</title>
		<link>http://glufke.net/2007/09/12/transformar-linhas-do-sql-em-string-delimitada/</link>
		<comments>http://glufke.net/2007/09/12/transformar-linhas-do-sql-em-string-delimitada/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 20:02:00 +0000</pubDate>
		<dc:creator>glufke</dc:creator>
				<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[Utilidade]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/09/12/transformar-linhas-do-sql-em-string-delimitada/</guid>
		<description><![CDATA[Essa procedure pode ser muito útil em algumas situações: Ela pega as linhas de uma coluna e retorna cada linha separada por ví­rgula na mesma string. 
CREATE OR REPLACE FUNCTION rowtocol (
   p_slct IN VARCHAR2,
   p_dlmtr IN VARCHAR2 DEFAULT ',' ) RETURN VARCHAR2 AUTHID CURRENT_USER
AS
   TYPE c_refcur IS REF [...]]]></description>
			<content:encoded><![CDATA[<p>Essa procedure pode ser muito útil em algumas situações: Ela pega as linhas de uma coluna e retorna cada linha separada por ví­rgula na mesma string. <span id="more-14"></span></p>
<pre class="brush: sql;">CREATE OR REPLACE FUNCTION rowtocol (
   p_slct IN VARCHAR2,
   p_dlmtr IN VARCHAR2 DEFAULT ',' ) RETURN VARCHAR2 AUTHID CURRENT_USER
AS
   TYPE c_refcur IS REF CURSOR;
   lc_str VARCHAR2(4000);
   lc_colval VARCHAR2(4000);
   c_dummy c_refcur;
   l number;
BEGIN
   OPEN c_dummy FOR p_slct;
   LOOP
     FETCH c_dummy INTO lc_colval;
     EXIT WHEN c_dummy%NOTFOUND;
     lc_str := lc_str || p_dlmtr || lc_colval;
   END LOOP;
   CLOSE c_dummy;
   RETURN SUBSTR(lc_str,2);
END;
</pre>
<div id="ads_336x280"><script type="text/javascript"><!--
google_ad_client = "pub-8964513116661040";
google_alternate_color = "ffffFF";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
//2007-09-07: wp_quadrado_gra
google_ad_channel = "0247072216";
google_color_border = "FFFFFF";
google_color_bg = "FFFFff";
google_color_link = "4F82CB";
google_color_text = "000000";
google_color_url = "4F82CB";
//-->
</script><script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p>Agora vamos ao exemplo:</p>
<pre class="brush: sql;">SQL> CREATE OR REPLACE FUNCTION rowtocol (
  2     p_slct IN VARCHAR2,
  3     p_dlmtr IN VARCHAR2 DEFAULT ',' )
  4  RETURN VARCHAR2
  5     AUTHID CURRENT_USER AS
  6     TYPE c_refcur IS REF CURSOR;
  7     lc_str VARCHAR2(4000);
  8     lc_colval VARCHAR2(4000);
  9     c_dummy c_refcur;
 10     l number;
 11  BEGIN
 12     OPEN c_dummy FOR p_slct;
 13     LOOP
 14       FETCH c_dummy INTO lc_colval;
 15       EXIT WHEN c_dummy%NOTFOUND;
 16       lc_str := lc_str || p_dlmtr || lc_colval;
 17     END LOOP;
 18     CLOSE c_dummy;
 19     RETURN SUBSTR(lc_str,2);
 20  END;
 21  /

Function created.

SQL> SELECT ROWTOCOL('SELECT ENAME FROM EMP') FROM DUAL;

ROWTOCOL('SELECTENAMEFROMEMP')
------------------------------------------------------------------
SMITE,ALLEN,WARD,JONES,MARTIN,BLAKE,SCOTT,TURNER,ADAMS,JAMES,FORD

SQL></pre>
<p>Comente <a href="http://glufke.net/oracle/viewtopic.php?t=31">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/09/12/transformar-linhas-do-sql-em-string-delimitada/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

