IMPORTAÇÃO DE ARQUIVO TEXTO com erros
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 ?
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
Curtidas 0
Melhor post
Marisiana Battistella
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:
[url]http://www.techonthenet.com/oracle/functions/substr.php[/url]
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]
GOSTEI 1
Mais Respostas
Thiago Santana
28/05/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.
Se caso for na aplicação essa separação necessária, informe qual a linguagem.
GOSTEI 1
Tiredmonkey
28/05/2015
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
GOSTEI 0
Marisiana Battistella
28/05/2015
Você precisa conferir se as posições de inicio e fim definidas no SUBSTRING estão corretas.
GOSTEI 1
Tiredmonkey
28/05/2015
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
?
GOSTEI 0
Marisiana Battistella
28/05/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.
GOSTEI 1
Tiredmonkey
28/05/2015
entao no Oracle eu delimito o campo campo1 || '-' || campo2 e no sql server como faço isso ?
GOSTEI 0
Marisiana Battistella
28/05/2015
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
GOSTEI 1
Tiredmonkey
28/05/2015
isso e no slq para ORACLE certo ? ou para SQL SERVER TAMBEM ?
GOSTEI 0
Marisiana Battistella
28/05/2015
O que eu passei seria no Oracle, no SQLServer talvez você tenha que utilizar SUBSTRING.
No PostgreSQL é assim:
Verifica qual é a sintaxe que tem que utilizar no SQLServer...
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...
GOSTEI 1
Thiago Santana
28/05/2015
Para concatenar no SQL Server utiliza-se o operador "+".
SELECT SUBSTRING(20150525,1,4) + '/' SUBSTRING(20150525,5,2) + SUBSTRING(20150525,7,2)
GOSTEI 1
Tiredmonkey
28/05/2015
Muito obrigado Gente! Vocês me ajudaram muito...
GOSTEI 0
Marisiana Battistella
28/05/2015
Por nada Emerson!
Participe sempre que puder..!
Participe sempre que puder..!
GOSTEI 0
Thiago Santana
28/05/2015
Disponha Emerson!
GOSTEI 0
Tiredmonkey
28/05/2015
galera desculpa ser chato mas e que agora me deparei com outra situação...
posso fazer isso ?
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 ?
GOSTEI 0
Tiredmonkey
28/05/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 ?
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 ?
GOSTEI 0
Tiredmonkey
28/05/2015
CONSEGUI RESOLVER PESSOAL!! VALEU MESMO :D
GOSTEI 0
Marisiana Battistella
28/05/2015
Que bom que conseguiu! =D
GOSTEI 0
Thiago Santana
28/05/2015
Existiam colunas com o mesmo nome! :D
GOSTEI 0