<?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; SQL</title>
	<atom:link href="http://flaviosilveira.com/tag/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>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>

