COMO CONCATENAR DATAS DENTRO DE UMA VARIÁVEL?

31/07/2020

0

OLÁ PESSOAL BOA TARDE ESTOU COM DIFICULDADE DE FAZER ESSA EXECUÇÃO NO SQL SERVER.

USE TUBO_AGUAS

DECLARE @DATAINICIAL DATETIME, @DATAFINAL DATETIME, @NOMEVENDEDOR AS VARCHAR(MAX), @CODVENDEDOR AS INT, @CODUSUARIO AS INT, @BDDESTINO AS VARCHAR(MAX),@BDORIGEM AS VARCHAR(MAX), @STRSQL AS VARCHAR(MAX)

SET @DATAINICIAL='2020-01-01'

SET @DATAFINAL='2020-07-28'

SET @NOMEVENDEDOR='HULDA'

SET @CODVENDEDOR=1

SET @CODUSUARIO=1

SET @BDDESTINO=' TUBO_AGUAS.dbo.CPExterno '

SET @BDORIGEM=' NFETUBO_AGUAS.dbo.Cnota '


SET @STRSQL='insert into ' + CAST(@BDDESTINO AS VARCHAR) + '(Cliente,DataPedido,VrPedido,DataDigitacao,Agente,NomeCliente,NOTAFISCAL) select Cliente,DataNota,ValorNota,DataNota,AGENTE,NomeCliente,NotaFiscal from ' + CAST(@BDORIGEM AS VARCHAR) + ' WHERE DataNota>= ' + CAST(@DATAINICIAL AS DATETIME) + ' AND DataNota<= ' + CAST(@DATAFINAL AS DATETIME)

EXEC(@STRSQL)




SEMPRE DA ESSE ERRO


Mensagem 242, Nível 16, Estado 3, Linha 7
A conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo.
Mensagem 241, Nível 16, Estado 1, Linha 20
Falha ao converter data e/ou hora da cadeia de caracteres.


PODERIAM ME AJUDAR PORFAVOR
Daniel

Daniel

Responder

Posts

31/07/2020

Emerson Nascimento

tente assim:
DECLARE
	@DATAINICIAL DATETIME,
	@DATAFINAL DATETIME,
	@NOMEVENDEDOR AS VARCHAR(MAX),
	@CODVENDEDOR AS INT,
	@CODUSUARIO AS INT,
	@BDDESTINO AS VARCHAR(MAX),
	@BDORIGEM AS VARCHAR(MAX),
	@STRSQL AS VARCHAR(MAX)

SET @DATAINICIAL='2020-01-01'
SET @DATAFINAL = '2020-07-28'
SET @NOMEVENDEDOR='HULDA'
SET @CODVENDEDOR=1
SET @CODUSUARIO=1
SET @BDORIGEM = 'NFETUBO_AGUAS.dbo.Cnota '
SET @BDDESTINO = 'TUBO_AGUAS.dbo.CPExterno '

SET @STRSQL =	' insert into ' + @BDDESTINO + '(Cliente,DataPedido,VrPedido,DataDigitacao,Agente,NomeCliente,NOTAFISCAL)'+
				' select Cliente,DataNota,ValorNota,DataNota,AGENTE,NomeCliente,NotaFiscal'+
				' from ' + @BDORIGEM +
				' where DataNota Between ''' + convert(varchar(10),@DATAINICIAL,23) + ''' AND ''' + convert(varchar(10),@DATAFINAL,23) + ''''

EXEC(@STRSQL)
o problema é que na última linha você estava tentando transformar conteúdos DATETIME (@DATAINICIAL, @DATAFINAL) em DATETIME (isso mesmo), e tentando concatenar com uma string.
também havia um typecast de @BDDESTINO e @BDORIGEM para varchar, sendo que as variáveis já são do tipo varchar.
Como era um typecast desnecessário, retirei.
Responder

31/07/2020

Daniel

tente assim:
DECLARE
	@DATAINICIAL DATETIME,
	@DATAFINAL DATETIME,
	@NOMEVENDEDOR AS VARCHAR(MAX),
	@CODVENDEDOR AS INT,
	@CODUSUARIO AS INT,
	@BDDESTINO AS VARCHAR(MAX),
	@BDORIGEM AS VARCHAR(MAX),
	@STRSQL AS VARCHAR(MAX)

SET @DATAINICIAL='2020-01-01'
SET @DATAFINAL = '2020-07-28'
SET @NOMEVENDEDOR='HULDA'
SET @CODVENDEDOR=1
SET @CODUSUARIO=1
SET @BDORIGEM = 'NFETUBO_AGUAS.dbo.Cnota '
SET @BDDESTINO = 'TUBO_AGUAS.dbo.CPExterno '

SET @STRSQL =	' insert into ' + @BDDESTINO + '(Cliente,DataPedido,VrPedido,DataDigitacao,Agente,NomeCliente,NOTAFISCAL)'+
				' select Cliente,DataNota,ValorNota,DataNota,AGENTE,NomeCliente,NotaFiscal'+
				' from ' + @BDORIGEM +
				' where DataNota Between ''' + convert(varchar(10),@DATAINICIAL,23) + ''' AND ''' + convert(varchar(10),@DATAFINAL,23) + ''''

EXEC(@STRSQL)
o problema é que na última linha você estava tentando transformar conteúdos DATETIME (@DATAINICIAL, @DATAFINAL) em DATETIME (isso mesmo), e tentando concatenar com uma string.
também havia um typecast de @BDDESTINO e @BDORIGEM para varchar, sendo que as variáveis já são do tipo varchar.
Como era um typecast desnecessário, retirei.


Amigo boa tarde,

eu tentei desse jeito mas deu a seguinte mensagem


Mensagem 242, Nível 16, Estado 3, Linha 12
A conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo.


o que poderia ser?
Responder

31/07/2020

Daniel

tente assim:
DECLARE
	@DATAINICIAL DATETIME,
	@DATAFINAL DATETIME,
	@NOMEVENDEDOR AS VARCHAR(MAX),
	@CODVENDEDOR AS INT,
	@CODUSUARIO AS INT,
	@BDDESTINO AS VARCHAR(MAX),
	@BDORIGEM AS VARCHAR(MAX),
	@STRSQL AS VARCHAR(MAX)

SET @DATAINICIAL='2020-01-01'
SET @DATAFINAL = '2020-07-28'
SET @NOMEVENDEDOR='HULDA'
SET @CODVENDEDOR=1
SET @CODUSUARIO=1
SET @BDORIGEM = 'NFETUBO_AGUAS.dbo.Cnota '
SET @BDDESTINO = 'TUBO_AGUAS.dbo.CPExterno '

SET @STRSQL =	' insert into ' + @BDDESTINO + '(Cliente,DataPedido,VrPedido,DataDigitacao,Agente,NomeCliente,NOTAFISCAL)'+
				' select Cliente,DataNota,ValorNota,DataNota,AGENTE,NomeCliente,NotaFiscal'+
				' from ' + @BDORIGEM +
				' where DataNota Between ''' + convert(varchar(10),@DATAINICIAL,23) + ''' AND ''' + convert(varchar(10),@DATAFINAL,23) + ''''

EXEC(@STRSQL)
o problema é que na última linha você estava tentando transformar conteúdos DATETIME (@DATAINICIAL, @DATAFINAL) em DATETIME (isso mesmo), e tentando concatenar com uma string.
também havia um typecast de @BDDESTINO e @BDORIGEM para varchar, sendo que as variáveis já são do tipo varchar.
Como era um typecast desnecessário, retirei.


Amigo boa tarde,

eu tentei desse jeito mas deu a seguinte mensagem


Mensagem 242, Nível 16, Estado 3, Linha 12
A conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo.


o que poderia ser?



EU ACHO QUE TEM ALGUMA COISA HAVER COM O FORMATO DA DATA FINAL
Responder

31/07/2020

Emerson Nascimento

me parece que o formato de data está configurado como AAAA-DD-MM

tente trocar o conteúdo inicial da variável @DATAFINAL. assim:
SET @DATAINICIAL='2020-01-01'
SET @DATAFINAL = '2020-28-07' -- troquei a posição do dia com o mês



Responder

31/07/2020

Daniel

tente assim:
DECLARE
	@DATAINICIAL DATETIME,
	@DATAFINAL DATETIME,
	@NOMEVENDEDOR AS VARCHAR(MAX),
	@CODVENDEDOR AS INT,
	@CODUSUARIO AS INT,
	@BDDESTINO AS VARCHAR(MAX),
	@BDORIGEM AS VARCHAR(MAX),
	@STRSQL AS VARCHAR(MAX)

SET @DATAINICIAL='2020-01-01'
SET @DATAFINAL = '2020-07-28'
SET @NOMEVENDEDOR='HULDA'
SET @CODVENDEDOR=1
SET @CODUSUARIO=1
SET @BDORIGEM = 'NFETUBO_AGUAS.dbo.Cnota '
SET @BDDESTINO = 'TUBO_AGUAS.dbo.CPExterno '

SET @STRSQL =	' insert into ' + @BDDESTINO + '(Cliente,DataPedido,VrPedido,DataDigitacao,Agente,NomeCliente,NOTAFISCAL)'+
				' select Cliente,DataNota,ValorNota,DataNota,AGENTE,NomeCliente,NotaFiscal'+
				' from ' + @BDORIGEM +
				' where DataNota Between ''' + convert(varchar(10),@DATAINICIAL,23) + ''' AND ''' + convert(varchar(10),@DATAFINAL,23) + ''''

EXEC(@STRSQL)
o problema é que na última linha você estava tentando transformar conteúdos DATETIME (@DATAINICIAL, @DATAFINAL) em DATETIME (isso mesmo), e tentando concatenar com uma string.
também havia um typecast de @BDDESTINO e @BDORIGEM para varchar, sendo que as variáveis já são do tipo varchar.
Como era um typecast desnecessário, retirei.


Amigo boa tarde,

eu tentei desse jeito mas deu a seguinte mensagem


Mensagem 242, Nível 16, Estado 3, Linha 12
A conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo.


o que poderia ser?



EU ACHO QUE TEM ALGUMA COISA HAVER COM O FORMATO DA DATA FINAL



amigao muito obrigado deu certo so mudei o type para 105

DECLARE
@DATAINICIAL DATETIME,
@DATAFINAL DATETIME,
@NOMEVENDEDOR AS VARCHAR(MAX),
@CODVENDEDOR AS INT,
@CODUSUARIO AS INT,
@BDDESTINO AS VARCHAR(MAX),
@BDORIGEM AS VARCHAR(MAX),
@STRSQL AS VARCHAR(MAX)

SET @DATAINICIAL='08-06-2020'
SET @DATAFINAL = '08-06-2020'
SET @NOMEVENDEDOR='HULDA'
SET @CODVENDEDOR=1
SET @CODUSUARIO=1
SET @BDORIGEM = 'NFETUBO_AGUAS.dbo.Cnota '
SET @BDDESTINO = 'TUBO_AGUAS.dbo.CPExterno '

SET @STRSQL = ' insert into ' + @BDDESTINO + '(Cliente,DataPedido,VrPedido,DataDigitacao,Agente,NomeCliente,NOTAFISCAL)'+
' select Cliente,DataNota,ValorNota,DataNota,AGENTE,NomeCliente,NotaFiscal'+
' from ' + @BDORIGEM +
' where DataNota Between ''' + convert(varchar(10),@DATAINICIAL,105) + ''' AND ''' + convert(varchar(10),@DATAFINAL,105) + ''''

EXEC(@STRSQL)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar