COMO CONCATENAR DATAS DENTRO DE UMA VARIÁVEL?

31/07/2020

4

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
Responder

Posts

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
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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar