Usuário com melhor resposta
Dúvida Conversão para Smalldatetime

Pergunta
-
Respostas
-
Olá Daniel,
Se você vai repetir a mesma data para todos os registros não faz sentido utilizar o CASE. Crie uma variável, armazene a data nessa variável e repita-a para todos os registros. Ex:
Code SnippetDECLARE
@Valor SMALLDATETIMESET
@Valor = (SELECT <Aquela Formula Toda> FROM Tabela)SELECT
*, @Valor AS Data FROM Tabela[ ]s,
Gustavo
Todas as Respostas
-
Boa Tarde,
Quantos registros as consultas abaixo retornam ?
Select
count(*) From D_Telecobranca_Entrada_TmpWhere
Substring(Det_Arq,1,1) = 0 and ISDATE(Substring(Det_Arq,4,8)) = 0Select
count(*) From D_Telecobranca_Entrada_TmpWhere
Substring(Det_Arq,1,1) = 0[ ]s,
Gustavo
-
-
Gustavo,
acho que o erro está acontecendo pq estou utilizando o Case When.
Select
Case When Substring(Det_Arq,1,1) = 0 Then Convert(Smalldatetime,Substring(Det_Arq,4,8),103) End as Dt_Geracao_Arq --,Case When Substring(Det_Arq,1,1) = 0 Then Substring(Det_Arq,21,2) End as UFFrom
dbo.D_Telecobranca_Entrada_Tmp -
-
Bom Dia Daniel,
Se as duas consultas retornam um registro, significa que o resultado da Substring não é uma data válida. Qual é o resultado do SELECT abaixo:
Code SnippetSelect
Substring(Det_Arq,4,8) From D_Telecobranca_Entrada_TmpWhere
Substring(Det_Arq,1,1) = 0[ ]s,
Gustavo
-
O resultado foi esse:
Code Snippet06092008
Vc viu como eu quero fazer? Estou querendo fazer esse mesmo select que vc pediu para rodar com o Case When.
O erro que está dando é:
Code SnippetMsg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type smalldatetime.
-
-
-
Bom Dia Daniel,
Inicialmente eu recomendaria a seguinte solução:
SELECT
CONVERT(CHAR(10),CAST((RIGHT(Substring(Det_Arq,4,8),4) + SUBSTRING(Substring(Det_Arq,4,8),3,2) + LEFT(Substring(Det_Arq,4,8),2)) AS SMALLDATETIME),103)From
D_Telecobranca_Entrada_TmpWhere
Substring(Det_Arq,1,1) = 0Senão fosse necessário o formato 103 (ou se você pudesse colocar na aplicação), o código seria um pouco mais limpo.
[ ]s,
Gustavo
-
-
Bom Dia Daniel,
De acordo com a lógica passada, o seu CASE WHEN está inadequado já que não existe condição para o ELSE, ou seja, me parece que a idéia não envolve uma escolha (CASE ou IF) mas sim uma única opção. Se a idéia é converter todos os campos não é preciso utilizar o CASE. Basta converter diretamente.
[ ]s,
Gustavo
-
A ideia não é converter todos os campos. A ideia é pegar somente um pedaço dessa string, ou seja, a data em quetão e repetir para todos os outros registros.
O RESULTADO ESTÁ SENDO ESSE
Code Snippet06/09/2008
NULL
NULL
NULL
NULL
NULL
NULL
NULLO RESULTADO ESPERADO É:
Code Snippet06/09/2008
06/09/2008
06/09/2008
06/09/2008
06/09/2008
06/09/2008 -
-
Olá Daniel,
Se você vai repetir a mesma data para todos os registros não faz sentido utilizar o CASE. Crie uma variável, armazene a data nessa variável e repita-a para todos os registros. Ex:
Code SnippetDECLARE
@Valor SMALLDATETIMESET
@Valor = (SELECT <Aquela Formula Toda> FROM Tabela)SELECT
*, @Valor AS Data FROM Tabela[ ]s,
Gustavo
-