IMPORTAÇÃO DE ARQUIVO TEXTO com erros

28/05/2015

0

Galera boa tarde!
estou importando um arquivo texto que contem a seguinte linha


00012015052500251642

ou seja

0001 - crachá do funcionario
2015-05-25 data batida ponto
00251642 batida ponto

como faço a separação ? pois nao e delimitado por ; ou algo assim ?
Tiredmonkey

Tiredmonkey

Responder

Post mais votado

28/05/2015

Qual é o banco de dados que vc está utilizando?

Essa string possuirá sempre esse número de caracteres?
Se a resposta for sim, você pode utiliza SUBSTRING para obter essas informações
Exemplo de como fazer no Oracle:
 select substr('00012015052500251642', 1, 4) as cracha,
       substr('00012015052500251642', 4, 12) as data,
       substr('00012015052500251642', 12, 20)  as batida
   from dual            

[url]http://www.techonthenet.com/oracle/functions/substr.php[/url]

Marisiana Battistella

Marisiana Battistella
Responder

Mais Posts

28/05/2015

Thiago Santana

Essa solução da Marisiana é perfeita se tratando de banco de dados!
Se caso for na aplicação essa separação necessária, informe qual a linguagem.
Responder

28/05/2015

Tiredmonkey

segue ai meu codigo mas ele nao esta retornando os campos certos ta misturando tudo

IF EXISTS (SELECT NAME FROM TEMPDB.SYS.tables WHERE name LIKE '#TEMP_BULK%')
	DROP TABLE #TEMP_BULK
CREATE TABLE #TEMP_BULK(TEXTO VARCHAR(100))
GO
BULK INSERT #TEMP_BULK FROM	'C:\importacaoponto\rep.txt'
GO
ALTER TABLE #TEMP_BULK ADD ID INT IDENTITY(1,1)
GO
SELECT
	SUBSTRING(TEXTO,1,9)AS sequenciapotno
	,SUBSTRING(TEXTO,10,10)AS batidaok
	,SUBSTRING(TEXTO,11,18)AS DATAPONTO
	,SUBSTRING(TEXTO,19,22) AS HORA
	,SUBSTRING(TEXTO,23,23)AS inipis
	,SUBSTRING(TEXTO,24)LEN(TEXTO)) AS PIS
FROM #TEMP_BULK
Responder

28/05/2015

Marisiana Battistella

Você precisa conferir se as posições de inicio e fim definidas no SUBSTRING estão corretas.
Responder

28/05/2015

Tiredmonkey

Você precisa conferir se as posições de inicio e fim definidas no SUBSTRING estão corretas.




as posiçoes eu acertei :D


mas uma ultima duvida, como que faço pra converter 20150525 para date 2015-05-25
?
Responder

28/05/2015

Marisiana Battistella

Eu acho que vc tem que separar o ano, mês e dia utilizando SUBSTRING e incluir o separador ( / ou - ) e depois vc pode converter para data.
Responder

28/05/2015

Tiredmonkey

entao no Oracle eu delimito o campo campo1 || '-' || campo2 e no sql server como faço isso ?
Responder

28/05/2015

Marisiana Battistella

No SQLServer é com || também. Veja um exemplo:
select substr('20150525', 1, 4)||'/'|| substr('20150525', 5, 2) ||'/'|| substr('20150525', 7, 2) as data 
   from dual
Responder

28/05/2015

Tiredmonkey

isso e no slq para ORACLE certo ? ou para SQL SERVER TAMBEM ?
Responder

28/05/2015

Marisiana Battistella

O que eu passei seria no Oracle, no SQLServer talvez você tenha que utilizar SUBSTRING.

No PostgreSQL é assim:
select to_date( substr('20150525', 1, 4)||'/'|| substr('20150525', 5, 2) ||'/'||substr('20150525', 7, 2), 'yyyy/mm/dd') as data


Verifica qual é a sintaxe que tem que utilizar no SQLServer...
Responder

29/05/2015

Tiredmonkey

Muito obrigado Gente! Vocês me ajudaram muito...
Responder

29/05/2015

Marisiana Battistella

Por nada Emerson!
Participe sempre que puder..!
Responder

29/05/2015

Thiago Santana

Disponha Emerson!
Responder

29/05/2015

Tiredmonkey

galera desculpa ser chato mas e que agora me deparei com outra situação...

SELECT
     s.[idMotorista]
     ,s.dataHoraVinculacao
     ,f.NOMEFUNC
     ,(
		select min(dataHoraVinculacao)
		from [Garagem].[dbo].[Servico] 
		where dataHoraVinculacao > @data
     ) datainicial
     ,b.SUBSTRING(TEXTO,11,2)+ '-' + SUBSTRING(TEXTO,13,2)+ '-' +SUBSTRING(TEXTO,15,4) as data
     ,b.SUBSTRING(TEXTO,19,2)+ ':' + SUBSTRING(TEXTO,21,2)AS HORA
FROM 
	[Garagem].[dbo].[Servico] s
	 LEFT JOIN OPENQUERY (GLOBUS,'SELECT CODIGO_GLOBUS,CODIGO_SPARK FROM T_ARR_PARAM_PRDT') l on (l.CODIGO_SPARK = s.idMotorista)
	 LEFT JOIN OPENQUERY (GLOBUS,'SELECT CODINTFUNC,NOMEFUNC FROM FLP_FUNCIONARIOS') f on (f.CODINTFUNC = l.CODIGO_GLOBUS)
	 LEFT JOIN OPENQUERY (GLOBUS,'SELECT TIPODOCTO,NRDOCTO,CODINTFUNC FROM FLP_DOCUMENTOS') d on (d.CODINTFUNC = f.CODINTFUNC)
	 LEFT JOIN #TEMP_BULK b on (SUBSTRING(TEXTO,24,10)=d.NRDOCTO )
where 
	s.dataHoraVinculacao > @data



posso fazer isso ?
Responder

29/05/2015

Tiredmonkey

tudo isso ai funciona o problema e que o select ali com
b.SUBSTRING(TEXTO,11,2)+ '-' + SUBSTRING(TEXTO,13,2)+ '-' +SUBSTRING(TEXTO,15,4) as data
b.SUBSTRING(TEXTO,19,2)+ ':' + SUBSTRING(TEXTO,21,2)AS HORA


da erro !

Mensagem 4121, Nível 16, Estado 1, Linha 7
Não é possível localizar a coluna "b" ou a função definida pelo usuário ou o agregado"b.SUBSTRING", ou o nome é ambíguo.


como posso fazer para chamar estes dados ?
Responder

29/05/2015

Tiredmonkey

CONSEGUI RESOLVER PESSOAL!! VALEU MESMO :D
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