Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 521216
            [titulo] => IMPORTAÇÃO DE ARQUIVO TEXTO com erros
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-05-28 16:40:08
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 262490
            [status] => A
            [isExample] => 
            [NomeUsuario] => Marisiana Battistella
            [Apelido] => Marisiana
            [Foto] => 262490_20141229171421.jpg
            [Conteudo] => 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:
[code] select substr('00012015052500251642', 1, 4) as cracha,
substr('00012015052500251642', 4, 12) as data,
substr('00012015052500251642', 12, 20) as batida
from dual [/code]
[url]http://www.techonthenet.com/oracle/functions/substr.php[/url] ) )

IMPORTAÇÃO DE ARQUIVO TEXTO com erros

Emerson Silvestrin
   - 28 mai 2015

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 ?

Post mais votado

Marisiana
   - 28 mai 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:
#Código

 select substr('00012015052500251642', 1, 4) as cracha,
       substr('00012015052500251642', 4, 12) as data,
       substr('00012015052500251642', 12, 20)  as batida
   from dual            

http://www.techonthenet.com/oracle/functions/substr.php

Thiago Santana
   - 28 mai 2015

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.

Emerson Silvestrin
   - 28 mai 2015

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

#Código

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

Marisiana
   - 28 mai 2015

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

Emerson Silvestrin
   - 28 mai 2015


Citação:
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
?

Marisiana
   - 28 mai 2015

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.

Emerson Silvestrin
   - 28 mai 2015

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

Marisiana
   - 28 mai 2015

No SQLServer é com || também. Veja um exemplo:
#Código

select substr('20150525', 1, 4)||'/'|| substr('20150525', 5, 2) ||'/'|| substr('20150525', 7, 2) as data 
   from dual

Emerson Silvestrin
   - 28 mai 2015

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

Marisiana
   - 28 mai 2015

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

No PostgreSQL é assim:
#Código

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

Thiago Santana
   - 29 mai 2015

Para concatenar no SQL Server utiliza-se o operador "+".

#Código

SELECT SUBSTRING(20150525,1,4) + '/' SUBSTRING(20150525,5,2) + SUBSTRING(20150525,7,2)

Emerson Silvestrin
   - 29 mai 2015

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

Marisiana
   - 29 mai 2015

Por nada Emerson!
Participe sempre que puder..!

Thiago Santana
   - 29 mai 2015

Disponha Emerson!

Emerson Silvestrin
   - 29 mai 2015

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

#Código

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 ?

Emerson Silvestrin
   - 29 mai 2015

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 ?

Emerson Silvestrin
   - 29 mai 2015

CONSEGUI RESOLVER PESSOAL!! VALEU MESMO :D

Marisiana
   - 29 mai 2015

Que bom que conseguiu! =D

Thiago Santana
   - 29 mai 2015

Existiam colunas com o mesmo nome! :D