<?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>Flávio Silveira &#187; Programação SQL</title>
	<atom:link href="http://flaviosilveira.com/category/banco-de-dados/programacao-sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://flaviosilveira.com</link>
	<description>Tecnologia e Desenvolvimento</description>
	<lastBuildDate>Tue, 15 May 2012 03:05:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Formatando CPF no SQL com Expressões Regulares &#8211; RegexReplace</title>
		<link>http://flaviosilveira.com/2010/formatando-cpf-no-sql-com-expressoes-regulares-regexreplace/</link>
		<comments>http://flaviosilveira.com/2010/formatando-cpf-no-sql-com-expressoes-regulares-regexreplace/#comments</comments>
		<pubDate>Fri, 21 May 2010 15:22:32 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Expressões Regulares]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[Programação SQL]]></category>
		<category><![CDATA[Regex Replace]]></category>
		<category><![CDATA[Sql Server]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=209</guid>
		<description><![CDATA[Que as expressões regulares são bacanas e divertidas todo mundo já sabe. Elas estão presentes em várias linguagens e no SQL Server não poderia ser diferente. Se você é programador e ainda não sabe sobre as expressões regulares, não perca tempo. Você precisa se emocionar com o uso delas em seus códigos. Consulte os links [...]]]></description>
			<content:encoded><![CDATA[<p>Que as expressões regulares são bacanas e divertidas todo mundo já sabe.<br />
Elas estão presentes em várias linguagens e no SQL Server não poderia ser diferente.</p>
<p>Se você é programador e ainda não sabe sobre as expressões regulares, não perca tempo.<br />
Você precisa se emocionar com o uso delas em seus códigos.</p>
<p>Consulte os links abaixo para iniciar já esse aprendizado:<br />
Wikipedia &#8211; <a href="http://pt.wikipedia.org/wiki/Express%C3%A3o_regular">http://pt.wikipedia.org/wiki/Express%C3%A3o_regular</a><br />
Um excelente tutorial para começar do Rafael Jaques- <a href="http://www.phpit.com.br/artigos/entendendo-as-expressoes-regulares.phpit">http://www.phpit.com.br/artigos/entendendo-as-expressoes-regulares.phpit</a><br />
Aurélio Marinho Jargas &#8211; O guru das expressões regulares &#8211; <a href="http://aurelio.net/er/">http://aurelio.net/er/</a></p>
<p>Certo mas e o SQL Server ? Vamos voltar para ele..</p>
<p>Em um post antigo eu mostro como fazer a formatação de campos como CPF direto pelo SQL.</p>
<p>Mas digamos que alguns campos do CPF estejam com formatação correta com pontuação e dígitos e outras não.<br />
E ainda outras mais ou menos. Ex: <em>161.364.708-53, 16136470853, 161364708-53</em>.<br />
Você tem um problema e nesse caso um SubString não iria funcionar corretamente.</p>
<p>Solução? RegexReplace. Vamos ver como usar isso.<br />
<span id="more-209"></span><br />
Primeiro vamos montar a expressão regular.<br />
Vamos montar ela de maneira clara pensando apenas em como o CPF tem de ser exibido.<br />
Não vamos pensar no cálculo do dígito verificador nem nada desse tipo.</p>
<p>Bom o que queremos ?</p>
<ul>
<li>3 números seguidos de um ponto. Vamos lembrar que esse ponto pode existir ou não. Não sabemos como o dado foi salvo no banco.</li>
<li>Mais 3 números seguidos de outro ponto. Novamente não sabemos se esse ponto estará presente ou não.</li>
<li>Precisamos agora de 3 números seguidos por um hífen, que também não temos certeza se estará lá ou não.</li>
<li>Para fechar, dois números.</li>
</ul>
<p>Legal! Já sabemos o que queremos vamos agora começar a brincadeira.</p>
<p>Não vou explicar aqui cada operador e caracter. Isso é demorado e também não é meu objetivo aqui.<br />
Para começar com Expressões Regulares consulte os links que passei logo no início desse post.</p>
<p>Para trazer numerais na expressão regular usamos o seguinte</p>
<pre class="brush: bash; title: ; notranslate">
[0-9]
</pre>
<p>Mas isso vai me trazer apenas um numero, mas na verdade queremos 3 então fazemos da seguinte maneira</p>
<pre class="brush: bash; title: ; notranslate">
[0-9]{3}
</pre>
<p>Se você quisesse 2 números, bastava substituir o 3 pelo 2.</p>
<p>Legal, para pegar os números já temos todas as armas na mão.<br />
E agora os caracteres, o ponto e o hífen opcionais ??<br />
Vamos lá&#8230;</p>
<p>O ponto é um operador em expressão regular e não é o operador que vai trazer o que queremos.<br />
Nós precisamos de um ponto literalmente.<br />
Para isso vamos escapar o ponto, assim como escapamos aspas ou caracteres especiais em programação.<br />
Ficando assim:</p>
<pre class="brush: php; title: ; notranslate">
\.
/*Desconsidere umas das barras, acima
coloquei duas por conta do plugin de sintaxe do wordpress.*/
</pre>
<p>Agora para deixar isso opcional, basta colocar uma interrogação depois disso.</p>
<pre class="brush: bash; title: ; notranslate">
.?
</pre>
<p>Para o hífen, não é obrigatório escapar pois ele não é um operador em expressões regulares.<br />
Entretanto eu gosto de escapar ele. Para mim facilita a leitura.</p>
<pre class="brush: bash; title: ; notranslate">
-?
</pre>
<p>Certo. Temos como pegar os numerais, como pegar hífen e pontos. Agora é juntar tudo.<br />
Vamos usar parênteses para deixar tudo organizado e também para facilitar a nossa formatação mais para frente.</p>
<pre class="brush: bash; title: ; notranslate">
^([0-9]{3}).?([0-9]{3}).?([0-9]{3})-?([0-9]{2})$
</pre>
<p>Repare que coloquei um circunflexo(<em>^</em>) no início da expressão e um cifrão(<em>$</em>) no final.<br />
Isso indica que a String tem que ter um começo e um fim.<br />
Caso não tivesse isso poderia haver qualquer caractere antes ou depois do CPF.</p>
<p>Vejamos por partes então:</p>
<ul>
<li>^ &#8211; Inicia a string</li>
<li>([0-9]{3}) &#8211; 3 números</li>
<li>.? &#8211; Um ponto, que pode ter ou não, por isso a interrogação.</li>
<li>([0-9]{3}) &#8211; Novamente 3 números</li>
<li>.? &#8211; Mais um ponto, que pode ter ou não.</li>
<li>([0-9]{3}) &#8211; Mais 3 números</li>
<li>-? &#8211; Um hífen, que pode ter ou não. Não é obrigatório o escape nele.</li>
<li>([0-9]{2}) &#8211; Dois números.</li>
<li>$ &#8211; Finaliza a String.</li>
</ul>
<p>Agora vamos para a segunda parte, o RegexReplace do Sql Server.</p>
<p>A função RegexReplace tem 3 parâmetros obrigatórios.<br />
O primeiro é o seu campo, CPF nesse caso. O Segundo a expressão regular, e o terceiro o como queremos exibir.</p>
<p>Os dois primeiros parâmetros já temos.<br />
Para o modo de exibição funciona da seguinte forma.<br />
Quando usamos os parênteses em nossa expressão regular, elas se tornam variáveis que resgatamos com um cifrão e a ordem em que ela aparece na expressão. Então o primeiro parênteses seria o $1, o segundo o $2 e assim por diante.</p>
<p>Agora é só montar a função no Select.<br />
Ficando assim.</p>
<pre class="brush: sql; title: ; notranslate">
Select dbo.RegexReplace('161364.70853',
'^([0-9]{3}).?([0-9]{3}).?([0-9]{3})-?([0-9]{2})',
'$1.$2.$3-$4')
</pre>
<p>Entre as variáveis você pode colocar os caracteres para exibição como pontos, hífens, underline e qualquer coisa que queira.</p>
<p>Reparem que coloquei o CPF no primeiro parâmetro da função formatado de maneira errada propositalmente.<br />
Experimente modificar essa formatação, deixar só os números, só os pontos, enfim&#8230;<br />
Modifique também a exibição da formatação para ver o funcionamento.</p>
<p>É isso galera.</p>
<p>Agradeço ao meu grande brother Anderson Orso por me mostrar possível aprender expressões regulares facilmente.</p>
<p>Espero que tenham curtido.<br />
Qualquer dúvida só mandar.</p>
<p>Abraços!!</p>
<p><strong>UPDATE &#8211; 22 de maio</strong></p>
<p>Fala pessoal,<br />
não me dei conta ontem que esqueci um detalhe importantíssimo de todo essa papo aqui.</p>
<p>O RegexReplace e outras funções similares não são nativas no SQL Server ao contrário de outros bancos de dados. Para ter isso disponível nos seus Selects, Updates e etc, você deve compilar um assembly .NET e subir para o banco.</p>
<p>O código para compilar você pode <a title="User Defined Functions" href="http://flaviosilveira.com/wp-content/UserDefinedFunctions.cs.rar">baixar aqui</a>.<br />
Mais detalhes de como fazer e usar tudo isso você encontra <a href="http://justgeeks.blogspot.com/2008/08/adding-regular-expressions-regex-to-sql.html">nesse link</a>.</p>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/formatando-cpf-no-sql-com-expressoes-regulares-regexreplace/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Função para contar Palavras (Padrão de caracteres) em uma String Microsoft SQL Server</title>
		<link>http://flaviosilveira.com/2009/funcao-para-contar-palavras-padrao-de-caracteres-em-uma-string-microsoft-sql-server/</link>
		<comments>http://flaviosilveira.com/2009/funcao-para-contar-palavras-padrao-de-caracteres-em-uma-string-microsoft-sql-server/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 01:56:42 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[Programação SQL]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=125</guid>
		<description><![CDATA[Salve galera! Precisei durante essa semana de uma função que contasse quantas vezes uma palavra aparecia dentro de uma String no SQL Server. Achei que já tivesse algo pelo menos similar, mais após andar pelo MSDN e pelo Books Online vi que o jeito seria fazer uma função. A lógica é a seguinte: Recebo via [...]]]></description>
			<content:encoded><![CDATA[<p>Salve galera!</p>
<p>Precisei durante essa semana de uma função que contasse quantas vezes uma palavra aparecia dentro de uma String no SQL Server. Achei que já tivesse algo pelo menos similar, mais após andar pelo MSDN e pelo Books Online vi que o jeito seria fazer uma função.</p>
<p>A lógica é a seguinte:</p>
<ul>
<li>Recebo via Parâmetro a Palavra que quero buscar e a String toda ou texto.</li>
<li>Faço um loop baseado no tamanho do texto.</li>
<li>Pego o tamanho da palavra que está sendo procurada e a cada caracter do texto, andamos o tamanho da palavra e comparamos se isso é igual a palavra procurada.</li>
<li>Se for, soma um no contador de palavras e continua.</li>
</ul>
<p>Agora como fica o código disso? Repare abaixo:<br />
<span id="more-125"></span></p>
<pre class="brush: sql; title: ; notranslate">
CREATE FUNCTION CountSearchPat
(
      @Word Varchar(100),
      @String Varchar(Max)
)
RETURNS int
AS
BEGIN

      -- Declaração Variáveis
      Declare @Count int, @CountWord int

      -- Contador de quantas vezes apareceu a palavra
      Set @CountWord = 0

      -- Contador do Loop
      Set @Count = 0

      -- Loop
      While @Count &lt;= Len(@String)
      Begin

            -- Se encontrar a palavra soma mais um para @CountWord
            Set @CountWord =
                  Case When Substring(@String, @Count, Len(@Word)) = @Word
                        Then @CountWord + 1
                        Else @CountWord
                  End

            -- Soma mais um ao contador
            Set @Count = @Count + 1

      End

      -- Retorna Valor
      Return @CountWord

END
</pre>
<p>Repare no loop da linha 30 que tem seu contador baseado no tamanho da String inteira, para percorrer cada caracter.</p>
<p>Na linha 24 temos uma variável que seu valor depende do CASE onde, se a partir daquele caracter for encontrada a palavra, soma mais um, senão continua com o mesmo valor.</p>
<p>Na linha 31 temos a soma do contador do loop. E então o retorno do valor da função.</p>
<p>Agora é só testar.<br />
Por Exemplo: Select dbo.SearchStringPat(&#8216;teste&#8217;, &#8216;aatestehstestehjkteste&#8217;)<br />
O resultado será 3.</p>
<p>Agora reflita comigo no próximo Exemplo sugerido pelo meu Brother Hernando Santana:<br />
Você tem uma String da seguinte maneira &#8216;AAAAA&#8217; e procura pelo padrão &#8216;AA&#8217;. Qual valor irá retornar ?</p>
<p>A função criada aqui irá retornar 4. A resposta é uma questão de conceito. Eu ando caracter por caracter atrás da palavra. Podemos fazer andar a partir da palavra encontrada adicionando mais algumas variáveis sem problema e fazendo retornar o valor 2. Para minha necessidade não fazia diferença a princípio.</p>
<p>Idéia simples que resolveu os problemas do dia.<br />
Até a Próxima! Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/funcao-para-contar-palavras-padrao-de-caracteres-em-uma-string-microsoft-sql-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Limitando o SELECT do SQL em diferentes Bancos de Dados</title>
		<link>http://flaviosilveira.com/2009/limitando-o-select-do-sql-em-diferentes-bancos-de-dados/</link>
		<comments>http://flaviosilveira.com/2009/limitando-o-select-do-sql-em-diferentes-bancos-de-dados/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 22:09:02 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Programação SQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=71</guid>
		<description><![CDATA[Olá pessoal&#8230; Atualmente tenho tido o privilégio de trabalhar com vários data bases, e com isso está dando para ver as diferenças de sintaxe, performance, ferramentas e demais coisas de um para outro. Tenho mexido com Microsoft SQL, Postgres e Oracle. Uma coisa que me chamou a atenção foi a maneira de limitar a consulta [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal&#8230;</p>
<p>Atualmente tenho tido o privilégio de trabalhar com vários data bases, e com isso está dando para ver as diferenças de sintaxe, performance, ferramentas e demais coisas de um para outro.</p>
<p>Tenho mexido com Microsoft SQL, Postgres e Oracle.</p>
<p>Uma coisa que me chamou a atenção foi a maneira de limitar a consulta em cada um deles. Tenho feito bastante consultas limitadas pois ainda estou conhecendo a base de dados da empresa e não sei ao certo quantos registros tem certas tabelas. Para evitar que a coisa caia ou trave, faço consultas limitadas.</p>
<p>Repare as diferenças de um banco para outro abaixo:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT * FROM tabela LIMIT 20
</pre>
<p><span id="more-71"></span><br />
Essa é a sintaxe para o postgres, que acho que deve ser a mais conhecida por ser software livre e etc.<br />
Basta adicionar o parâmetro LIMIT e passar o valor de máximo de registros que você quer.</p>
<pre class="brush: sql; title: ; notranslate">
SELECT TOP 20 * FROM tabela
</pre>
<p>Essa é a maneira como o Microsoft limita sua consulta.<br />
Você adiciona o parâmetro TOP passando o valor do máximo de registros que você quer. Isso deve vir logo após o SELECT.</p>
<pre class="brush: sql; title: ; notranslate">
SELECT * FROM tabela WHERE ROWNUM &lt; 20
</pre>
<p>E por último o Oracle.<br />
Você deve usar o parâmetro ROWNUM junto a um operador (<, >, <=, >=, =) e em seguida o valor máximo de registros que você quer para sua consulta.<br />
Traduzindo este exemplo acima ficaria mais ou menos assim:<br />
<em>Selecione tudo da tabela chamada &#8216;tabela&#8217; onde o número de tuplas seja menor que 20</em></p>
<p>Por hoje é isso ai rapaziada. Valeu !</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/limitando-o-select-do-sql-em-diferentes-bancos-de-dados/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tratando CPF, CNPJ, Primeiro nome e Data pelo SQL (Postgre)</title>
		<link>http://flaviosilveira.com/2009/tratando-cpf-cnpj-primeiro-nome-e-data-pelo-sql-postgre/</link>
		<comments>http://flaviosilveira.com/2009/tratando-cpf-cnpj-primeiro-nome-e-data-pelo-sql-postgre/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 19:57:03 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Programação SQL]]></category>
		<category><![CDATA[formatação via sql]]></category>
		<category><![CDATA[postgres]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=46</guid>
		<description><![CDATA[Olhando para os códigos php no trabalho, como tem sido de costume para averiguar erros e algoritmos que possa melhorar, me deparo em vários controllers com uma série de splits e loops para horas tratar o cpf, horas tratar o cnpj que vem do banco de dados. No banco de dados estes campos estão salvos [...]]]></description>
			<content:encoded><![CDATA[<p>Olhando para os códigos php no trabalho, como tem sido de costume para averiguar erros e algoritmos que possa melhorar, me deparo em vários controllers com uma série de <a href="http://br.php.net/manual/pt_BR/function.split.php">splits</a> e loops para horas tratar o cpf, horas tratar o cnpj que vem do banco de dados.</p>
<p>No banco de dados estes campos estão salvos em um domínio String, e gravados sem pontuação ou dígitos. Então quando você quer mostrar para o usuário, para não deixar aquele emaranhado de números, você deixa as coisas como ele está acustumado a ver, com os pontos e etc.</p>
<p>Para não ficar repetindo a mesma rotina em vários locais do sistema, nem mesmo criar um método que eu tenha que chamar sempre que quiser um tratamento desses, já trago a coisa toda pronta no retorno da consulta. Simples, confira&#8230;</p>
<p>Trazendo o CPF com a pontuação e o dígito antes dos dois últimos numerais</p>
<pre class="brush: sql; title: ; notranslate">
SELECT SUBSTR(cpf, 1, 3) || '.' || SUBSTR(cpf, 4, 3) || '.' ||
SUBSTR(cpf, 7, 3) || '-' || SUBSTR(cpf, 10) AS cpf
FROM e001_pessoas
WHERE pessoaid = 33;
</pre>
<p> <span id="more-46"></span> Explicação:<br />
SELECT &#8211; estamos selecionando algo do banco SUBSTR &#8211; é uma função SQL, a mesma do PHP, a mesma do javascript que conhecemos, que serve para trazer parte de uma string.<br />
Sintaxe &#8211; SUBSTR(campo, á partir de qual caracter começar, o máximo de caracteres a trazer) , sendo esse último opcional.</p>
<p>Então repare começo pegando do campo CPF, a partir do campo 1, 3 caracteres. Em seguida faço uma concatenação, que no SQL é feita com dois pipelines (||). Concateno com um ponto (está entre aspas pois é uma string).<br />
Depois mais uma vez pego outro pedaço do campo cpf, dessa vez começando do 4° caracter. São mais 3 caracteres e mais uma concatenação com um ponto. Novamente mais um pedaço do cpf , começando do 7° caracter. São mais 3 caracteres e agora um dígito, o famoso <em>tracinho</em>.<br />
Finalizo essa parte pegando o restante do CPF, que está a partir do caracter 10. Não limitei o número de caracteres nesse último, pois quero todo o restante.</p>
<p>Em seguida faço um ALIAS para o meu resultado, chamando de <em>&#8216;cpf&#8217;</em>. Caso você não o faça o nome do campo  retornará como unknow ou com uma interrogação.<br />
FROM &#8211; para indicar a tabela onde está o campo, que no meu caso é a <em>e001_pessoas</em>.<br />
WHERE &#8211; para trazer apenas o cpf do registro <em>pessoaid = 33</em>.</p>
<p>Então a coisa toda é muito simples. Tenho meu cpf salvo no banco como um grande número. Pego 3 caracteres dele, concateno com um ponto, mais 3 caracteres, concateno a outro ponto, e assim por diante seguindo o <a href="http://en.wikipedia.org/wiki/File:Cpf2.jpg">modelo do cpf</a>.</p>
<p>Para o CNPJ funciona igual. Basta ver como é dividido o número do CNPJ, e ver quantos dígitos trazer, concatenar a que símbolo e assim por diante. Confira:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT SUBSTR(cnpj, 1, 2) || '.' || SUBSTR(cnpj, 3, 3) || '.' ||
SUBSTR(cnpj, 6, 3) || '/' || SUBSTR(cnpj, 9, 4) || '-' ||
SUBSTR(cnpj, 13) AS cnpj
FROM t020_clientes;
</pre>
<p>Acima trouxemos todos os CNPJ&#8217;s da tabela de clientes já com a devida pontuação e a coisa toda.</p>
<p>Uma outra situação é quando queremos mostrar apenas o primeiro nome da pessoa na tela. Novamente falando, você pode tratar isso onde quiser, mas o SQL pode fazer isso para você, então porque deixar isso passar&#8230;</p>
<pre class="brush: sql; title: ; notranslate">
SELECT SPLIT_PART(nome, '  ', 1) AS nome
FROM e001_pessoas
WHERE pessoaid = 33;
</pre>
<p>Acima usamos a função do SQL, SPLIT_PART, que se assemelha muito a SPLIT do php e a SPLIT do javascript, dividindo a string em pedaços, de acordo com um separador comum.<br />
Sintaxe &#8211; SPLIT_PART(campo que queremos dividir, separador entre as partes, parte que eu quero mostrar)</p>
<p>Então na SQL mostrada, a SPLIT_PART, separou o meu campo nome em partes, de acordo com o espaço em branco.<br />
Exemplo:  se o meu campo é &#8216;Maria Francisca Joana&#8217;, a função separou em 3 partes. 1 &#8211; Maria, 2 &#8211; Francisca e 3 &#8211; Joana.<br />
Nó último parâmetro da função eu passo a parte que eu quero mostrar. No meu caso como quero apenas o primeiro nome, trago só a primeira parte.</p>
<p>Outro caso, esse já bem mais usado, é quando eu tenho um campo de domínio DATE, e quero trazer no resultado da consulta como uma string já com os separadores de dia, mês e ano.<br />
Digamos que você queira trazer a data no seguinte formato DD/MM/AAAA.</p>
<pre class="brush: sql; title: ; notranslate">
SELECT TO_CHAR(dtnascimento, 'DD/MM/YYYY') AS dtnascimento
FROM e001_pessoas
WHERE pessoaid = 33;
</pre>
<p>Usando a função TO_CHAR você consegue isso.<br />
Sintaxe &#8211; TO_CHAR(campo à transformar, formato que você quer).<br />
Cuidado ! Repare no Y de Year, e não A de ano.</p>
<p>Experimente outras formatações.  Deixem o SQL trabalhar por vocês.</p>
<p>Abraços!<br />
Valeu !!!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/tratando-cpf-cnpj-primeiro-nome-e-data-pelo-sql-postgre/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

