Em algumas situações precisamos que a consulta de uma campo retorne somente o valor númerico, desprezando máscaras, ou valores inconsistentes, por exemplo o CEP sem as edições.
Abaixo uma função para o SQL Server que "limpa" o conteúdo do campo deixando somente os caracteres numéricos no resultado.
CREATE FUNCTION [dbo].[TiraLetras]
(
@Resultado VARCHAR(8000)
)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @CharInvalido SMALLINT
SET @CharInvalido = PATINDEX('%[^0-9]%', @Resultado)
WHILE @CharInvalido > 0
BEGIN
SET @Resultado = STUFF(@Resultado, @CharInvalido, 1, '')
SET @CharInvalido = PATINDEX('%[^0-9]%', @Resultado)
END
SET @Resultado = @Resultado
RETURN @Resultado
END
Select dbo.TiraLetras('AB12CD34%¨&*(56')
Resultado: '123456'
Select dbo.TiraLetras('95.012-500') 'CEP'
Resultado: '95012500'
quarta-feira, 31 de agosto de 2011
quarta-feira, 13 de julho de 2011
Download do SQL Server Denali CTP3
Foi liberado pela Microsoft o download do CTP3 da versão Denali (apelido da nova versão) do SQL Server.
Diversos recursos novos estão presentes no Denali, abaixo os links para download:
SQL Server Denali CTP3: https://www.microsoft.com/betaexperience/pd/SQLDCTP3CTA/enus/default.aspx
Feature Packs: http://go.microsoft.com/fwlink/?LinkID=216742
PowerPivot for Excel: http://www.microsoft.com/download/en/details.aspx?id=26721
Diversos recursos novos estão presentes no Denali, abaixo os links para download:
SQL Server Denali CTP3: https://www.microsoft.com/betaexperience/pd/SQLDCTP3CTA/enus/default.aspx
Feature Packs: http://go.microsoft.com/fwlink/?LinkID=216742
PowerPivot for Excel: http://www.microsoft.com/download/en/details.aspx?id=26721
domingo, 3 de julho de 2011
Eventos On-Line Imperdíveis de SQL Server
Nos próximos dias ocorrerão dois eventos on-line gratuitos sobre SQL Server que merecem o acompanhamento da comunidade SQL Server.
O primeiro será promovido pela empresa SolidQ e ocorrerá durante todo o mês de julho/2011 nas terças e quintas com duas sessões diárias as 20:00 e as 21:00.
Para inscrições acessem o site abaixo:
http://www.solidq.com/squ/courses/Pages/SolidQ-Virtual-Conference.aspx
Seguindo o embalo em agosto/2011 ocorrerá a Semana do SQL Server dos dias 1 a 6 também com duas sessões diárias as 21:00 e as 22:00. Para fazer a inscrição acessem o site abaixo:
https://www323.livemeeting.com/lrs/8000181573/Registration.aspx?pageName=h53mgg49dj267dkk
Abaixo as sessões:
01/08/2011 21:00 Era uma vez um reino de trevas... Denali + Windows Functions... e viveram felizes para sempre!
01/08/2011 22:00 Projeto Crescent - A Próxima Geração de Relatórios
02/08/2011 21:00 10 coisas que todo desenvolvedor deveria saber sobre SQL Server
02/08/2011 22:00 BI Semantic Model e PowerPivot for Excel vNext
03/08/2011 21:00 Data Collector: arquitetura, funcionamento e utilizações
03/08/2011 22:00 Primeiro contato com as ferramentas de BI do SQL Server - SSIS + SSAS + SSRS
04/08/2011 21:00 Extraindo, Transformando e Carregando Dados com o SQL Integration Services - Parte 1
04/08/2011 22:00 Extraindo, Transformando e Carregando Dados com o SQL Integration Services - Parte 2
05/08/2011 20:00 Gerenciando SQLServer Workloads com Resource Governor
05/08/2011 21:00 Evitando erros comuns na elaboração de código T-SQL
06/08/2011 22:00 SQL Server x SQL Azure, o que preciso saber?!
O primeiro será promovido pela empresa SolidQ e ocorrerá durante todo o mês de julho/2011 nas terças e quintas com duas sessões diárias as 20:00 e as 21:00.
Para inscrições acessem o site abaixo:
http://www.solidq.com/squ/courses/Pages/SolidQ-Virtual-Conference.aspx
Seguindo o embalo em agosto/2011 ocorrerá a Semana do SQL Server dos dias 1 a 6 também com duas sessões diárias as 21:00 e as 22:00. Para fazer a inscrição acessem o site abaixo:
https://www323.livemeeting.com/lrs/8000181573/Registration.aspx?pageName=h53mgg49dj267dkk
Abaixo as sessões:
01/08/2011 21:00 Era uma vez um reino de trevas... Denali + Windows Functions... e viveram felizes para sempre!
01/08/2011 22:00 Projeto Crescent - A Próxima Geração de Relatórios
02/08/2011 21:00 10 coisas que todo desenvolvedor deveria saber sobre SQL Server
02/08/2011 22:00 BI Semantic Model e PowerPivot for Excel vNext
03/08/2011 21:00 Data Collector: arquitetura, funcionamento e utilizações
03/08/2011 22:00 Primeiro contato com as ferramentas de BI do SQL Server - SSIS + SSAS + SSRS
04/08/2011 21:00 Extraindo, Transformando e Carregando Dados com o SQL Integration Services - Parte 1
04/08/2011 22:00 Extraindo, Transformando e Carregando Dados com o SQL Integration Services - Parte 2
05/08/2011 20:00 Gerenciando SQLServer Workloads com Resource Governor
05/08/2011 21:00 Evitando erros comuns na elaboração de código T-SQL
06/08/2011 22:00 SQL Server x SQL Azure, o que preciso saber?!
sábado, 25 de junho de 2011
Busca por string semelhantes, mas não iguais
Muitas vezes temos necessidade de procurar por string semelhantes, afinal é muito comum confundir-se entre diferentes grafias para palavras com o mesmo som, como Sousa e Souza.
A função de busca por semelhança mais conhecida em Oracle é SOUNDEX. Utilizando uma base com nomes de navios, posso procurar por nomes semelhantes a Brasil:
select vessel_name, t.cname
from vessel
(select 'BRASIL' cname from dual) t
where SOUNDEX(t.cname) = SOUNDEX(upper(vessel_name));
Considerando uma tabela com 52K navios, esta consulta retorna 33 linhas. Alguns nomes são realmente próximos, como Brazil, Brussel e Brazilian Lady. Outros nomes, nem tanto, como Barcelona, Bro Globe e Brooklin. Obviamente todos estes nomes correspondem ao mesmo valor quando aplicada a função SOUNDEX. Devido à implementação do SOUNDEX, todos navios começam com a letra B, pois a inicial deve ser a mesma.
Mas há outra função menos conhecida que pode ser bastante útil: Utl_Match.Edit_Distance_Similarity(s1, s2). A função compara duas strings e retorna o grau de similaridade entre elas, sempre um valor entre 0 e 100.
A query
select vessel_name, t.cname, utl_match.edit_distance_similarity(t.cname, upper(vessel_name)) simil
from vessel,
(select 'BRASIL' cname from dual) t
where utl_match.edit_distance_similarity(t.cname, upper(vessel_name)) > 50;
retorna 21 linhas, todas bastante similares (por que o valor deve ser maior que 50%), como Basil, Orasila e Hasil. É fácil notar que a primeira letra pode ser diferente, tornando a busca bem mais flexível.
Alterando o grau de similaridade, a query retorna um número diferente de linhas. Se o grau de similaridade for igual a 70, a consulta retorna 3 linhas apenas. Se for igual a 30, retorna 2156 linhas. No limite, grau de similaridade igual a 100 retorna somente valores exatamente iguais. Grau de similaridade igual a zero, retornaria todas as linhas da tabela.
Em um projeto que estou trabalhando, decidimos usar esta função exatamente porque o grau de similaridade pode ser um parâmetro na interface da aplicação ajustado pelo usuário, tornando as buscas mais flexíveis.
terça-feira, 14 de junho de 2011
Senhas case sensitive no Oracle 11
O padrão de configuração de senhas do Oracle 11 é case sensitive (distinção entre letras maiúsculas e minúsculas).
Para verificar esta configuração utilize a instrução SQL:
SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON
Para desativar este recurso de segurança utilize a instrução:
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
Para verificar esta configuração utilize a instrução SQL:
SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON
Para desativar este recurso de segurança utilize a instrução:
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
sexta-feira, 27 de maio de 2011
Exportando tabelas vazias com o EXP no Oracle 11
No Oracle 11 tem um parâmetro (deferred_segment_creation) que indica ao SGBD para não alocar segmentos no banco de dados enquanto uma tabela está vazia, desta forma economizando espaço.
A configuração padrão de instalação é ativo (TRUE).
Desta forma quem utiliza o utilitário exp para exportar as informações do banco de dados, observa que todas as tabelas vazias não são geradas no arquivo de exportação, sendo que em alguns casos isto é um problema.
Para resolver esta situação existem algumas procedimentos que podem ser feitos, o primeiro é trocar a exportação do exp pelo utilitário expdp.
Outra forma é desativar esta opção através dos comandos ALTER SESSION, ALTER SYSTEM deixando este parâmetro com o valor FALSE.
ALTER SYSTEM SET deferred_segment_creation=FALSE;
Entretanto esta segunda opção somente irá valer para as tabelas criadas após a execução do comando. Para resolver esta situação nas tabelas já criadas e vazias utilizar a instrução:
ALTER TABLE nome_da_tabelaALLOCATE EXTENT;
A configuração padrão de instalação é ativo (TRUE).
Desta forma quem utiliza o utilitário exp para exportar as informações do banco de dados, observa que todas as tabelas vazias não são geradas no arquivo de exportação, sendo que em alguns casos isto é um problema.
Para resolver esta situação existem algumas procedimentos que podem ser feitos, o primeiro é trocar a exportação do exp pelo utilitário expdp.
Outra forma é desativar esta opção através dos comandos ALTER SESSION, ALTER SYSTEM deixando este parâmetro com o valor FALSE.
ALTER SYSTEM SET deferred_segment_creation=FALSE;
Entretanto esta segunda opção somente irá valer para as tabelas criadas após a execução do comando. Para resolver esta situação nas tabelas já criadas e vazias utilizar a instrução:
ALTER TABLE nome_da_tabela
segunda-feira, 11 de abril de 2011
Melhore o desempenho do SQL Server reservando memória
Na configuração padrão do SQL Server a alocação de memória é dinâmica, sendo alocada a medida que o banco de dados precisa.
Se o servidor for dedicado ao banco de dados, altere a configuração do servidor para alocar até 75% da memória disponível para o SQL Server. No servidor abaixo 2GB serão alocados para o SQL Server logo que ele carrega.
Se o servidor for dedicado ao banco de dados, altere a configuração do servidor para alocar até 75% da memória disponível para o SQL Server. No servidor abaixo 2GB serão alocados para o SQL Server logo que ele carrega.
![]() |
Configuração de Memória do SQL Server |
Assinar:
Postagens (Atom)