Ir para conteúdo
Fórum Script Brasil
  • 0

SQL Server - Incluir traço em vários registros


elwissan

Pergunta

Bom dia para todos

Em um campo (tipo texto) há os seguintes dados 20050317, que corresponde ao ano, mês e dia (2005-03-17 e ao mesmo tempo é usado como código).

Preciso incluir os traços, ou seja:

De: 20050317 para: 20-05-03-17

De: 20041220 para: 20-04-12-20

De: 19950510 para: 19-95-05-10 e assim por diante.

O problema que o banco de dados é enorme. Há um comando que faz isso de uma vez no campo de todos os registros do Banco de dados?

Usando:

  • VB.NET 2015 Desktop
  • SQL Server (SqlClient)
  • Campo varchar(20)

Tem como usar o comando CommandText para fazer o que preciso ou há outra forma?

Exemplo de busca usando o CommandText:

CadTableAdapter.Adapter.SelectCommand.CommandText = "SELECT id, CadEntrada FROM Clientes WHERE (CadEntrada LIKE '" & TextCod.Text.ToString & "')"

CadTableAdapter.Fill(CadDataSet.CadEntrada)

Obrigado pela ajuda.

 

 

 

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Bom dia.

 

Caro colega, bom se eu entendi bem o sua necessidade, eu acho que isso te atende:

Tabela de exemplo:

--Criação da tabela de exemplo
CREATE TABLE tblCaminho
(
	codigoID int IDENTITY(1,1) NOT NULL,
	caminho varchar(250) NOT NULL,
	ColocarTraco varchar(20) NULL
)

 

Inserindo alguns valores

--Inserindo alguns valores
INSERT INTO tblCaminho values ('c:\', '12345678')
INSERT INTO tblCaminho values ('d:\', '90876564')
INSERT INTO tblCaminho values ('f:\', '32456340')
INSERT INTO tblCaminho values ('w:\', '8u76r432')
INSERT INTO tblCaminho values ('k:\', '67340942')
INSERT INTO tblCaminho values ('c:\', 'l0h6g4d6')

Criando um cursor para inserir traços de dois em dois caractere do campo de exmplo:

--Código completo do cursor
DECLARE @um varchar(3)
DECLARE @doi varchar(3)
DECLARE @tre varchar(3)
DECLARE @qua varchar(3)
DECLARE @coloca varchar(20)
DECLARE @temp varchar(20)

DECLARE cursorColca cursor for

	select ColocarTraco from tblCaminho 

open cursorColca
fetch next from cursorColca into @coloca

while @@FETCH_STATUS = 0
begin

	set @temp = @coloca
	set @um = SUBSTRING(@temp, 1, 2)
	set @doi = SUBSTRING(@temp, 3, 2)
	set @tre = SUBSTRING(@temp, 5, 2)
	set @qua = SUBSTRING(@temp, 7, 2)

	update tblCaminho
	set ColocarTraco = (@um +'-'+ @doi +'-'+ @tre +'-'+ @qua) 
	where ColocarTraco = @coloca

fetch next from cursorColca into @coloca
end

close cursorColca
deallocate cursorColca

Arquivo com comentários:

--VARIÁVEIS PARA PARTICIONAR O NUMERO
DECLARE @um varchar(3)
DECLARE @doi varchar(3)
DECLARE @tre varchar(3)
DECLARE @qua varchar(3)

--VARIÁVEL QUE VAI RECEBER O RSULTADO DO CURSOR
DECLARE @coloca varchar(20)

--VARIÁVEL A SER PARTICIONADA 
DECLARE @temp varchar(20)


--DECLARAÇÃO DO CURSOR EFETIVA
DECLARE cursorColca cursor for
--ESSE SELECTE PEGA APENAS O CAMPO ONDE VAMOS COLOCAR OS TRAÇOS
	select 
		ColocarTraco 
	from 
		tblCaminho --essa é uma tabela que criei como exemplo

--ABRINDO O CURSOR
open cursorColca

/*BUSCANDO A PRÓXIMA LINHA NO CURSOR E INSERINDO NA VARIÁVEL
DEFINIDA PARA ESSA FINALIDADE*/
fetch next from cursorColca into @coloca

--VERIFICA O STATUS DA BUSCA, CASO ESSE STATUS SEJA DIFERENTE DE 0,
--O LOOP PARA SIGNIFICANDO QUE O CURSOR CHEGOU NA ULTIMA LINHA DE SUA TABELA
while @@FETCH_STATUS = 0
begin
	--USANDO A VARIÁVEL TEMPORÁRIA PARA REALIZAR A QUEBRA DO CAMPO
	--QUE PRECISAMOS INSERIR OS "TRAÇOS"
	set @temp = @coloca

	--SEPARANDO OS PONTOS ESPECÍFICOS ONDE QUEREMOS COLOCAR OS TRAÇOS
	set @um = SUBSTRING(@temp, 1, 2)
	set @doi = SUBSTRING(@temp, 3, 2)
	set @tre = SUBSTRING(@temp, 5, 2)
	set @qua = SUBSTRING(@temp, 7, 2)


	--FAZENDO UPDATE DO CAMPO ATUAL
	update tblCaminho
	-- ESSA LINHA CONCATENA AS VARIÁVEIS COM OS TRAÇOS E INSERE NO CAMPO DA TABELA
	set ColocarTraco = (@um +'-'+ @doi +'-'+ @tre +'-'+ @qua) 

	--A CONDIÇÃO É QUE O CAMPO DA TABELA DEVE SER IGUAL AO DA VARIÁVEL
	where ColocarTraco = @coloca

/*BUSCA A PRÓXIMA LINHA NO CURSOR E INSERINDO NA VARIÁVEL
DEFINIDA PARA ESSA FINALIDADE NOVAMENTE E VOLTA PARA O INICIO DO LOOP, 
CASO NÃO ENCONTRE O STATUS DO FETCH SAI DE 0 PARA -1 E FINALIZA O LOOP*/
fetch next from cursorColca into @coloca
end

--FECHA O CUROSOR
close cursorColca
--RETIRA OS DADOS DO CURSOR DA MEMORIA OU UMA ESPECIE DE ROLLBACK
deallocate cursorColca

 

Esse cursor pode ser melhorado, dá uma pesquisada na internet sobre cursor para implementar esse script.

Obs. Faça o teste em ambiente de backup, algo assim antes de colocar em produção

 

Espero ter ajudado.

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

CREATE TABLE TABELA (ID VARCHAR(MAX))
GO

INSERT INTO TABELA SELECT '20050731';
GO
SELECT * FROM TABELA;
GO
UPDATE TABELA
SET ID = CONVERT(varchar(max),FORMAT(CONVERT(int,ID),'####-##-##'))
GO
SELECT * FROM TABELA;
 

Acho que essa forma é mais simples.

 

 

 

Editado por Marcos Roberto Vieira Juni
Melhorar código
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...