Em 8 de abril de 2017 00:22, Camilo <[email protected]> escreveu:
> Em 06/04/2017 22:28, Patrick B escreveu: > >> Em 7 de abril de 2017 12:36, Patrick B <[email protected] <mailto: >> [email protected]>> escreveu: >> >> Oi pessoal, tudo bem? >> >> Eu tenho a coluna (seg_table.path_name character varying(255), >> onde eu armazeno o caminho do arquivo (pdf ou jpg) no S3bucket. >> >> Exemplo: >> >> /{s3bucket}/filesuser/client/27801123/attachment/4510/main >> >> /{s3bucket}/filesuser/client/27801123/attachment/4510/file >> >> >> Eu preciso, num INNER JOIN, selecionar bem específico o 'main', >> talvez algo assim? >> >> ... >> FROM path_view n >> INNER JOIN seg_table AS s ON s.path_name = substr(n.path_name, >> char_pos '/file..' to get /filesuser/client/.../attachment/.../) >> || 'main' >> >> >> >> Mas não estou conseguindo.. poderiam me ajudar com a string? Obrigado! >> Patrick. >> >> >> >> Melhorando a explicação... Os caminhos que informei... >> >> /{s3bucket}/filesuser/client/27801123/attachment/4510/main >> >> /{s3bucket}/filesuser/client/27801123/attachment/4510/file >> >> >> ... pode se tornar: >> >> /{s3bucket}/filesuser/client/27801123/attachment/4510/main/1 >> 11/small/photo.jpg >> >> /{s3bucket}/filesuser/client/27801123/attachment/4510/file/1 >> 11/medium/photo.jpg >> >> >> onde... >> >> 27801123 = account_id >> 4510 = id >> file | main = type >> small | medium = variation >> photo.jpg = filename >> >> >> /{s3bucket}/filesuser/client/27801123/attachment/4510/main é o caminho >> root de /{s3bucket}/filesuser/client/27801123/attachment/4510/main/1 >> 11/small/photo.jpg. >> >> Mas eu preciso por numa where clause somente quando for = 'main' >> >> exemplo >> >> select REGEXP_REPLACE(path_name, '.*/', '') as col2 from >> seg_table limit 10; >> >> >> isso me retorna: >> >> photo.jpg >> main >> file >> >> >> Está funcionando.. eu consigo selecionar o main. Mas como vocês podem >> ver, não seleciono só o 'main'. Como acrescentar isso numa where clause? >> Como por exemplo: >> >> WHERE REGEXP_REPLACE(path_name, '.*/', '')::text = 'main' >> >> >> Obrigado! >> Patrick. >> >> >> >> _______________________________________________ >> pgbr-geral mailing list >> [email protected] >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >> > Patrick, > > Se você converter esse varchar em array usando a função string_to_array[1] > acredito que ficará mais fácil para você manipular esses dados. > > No exemplo abaixo eu usei o values somente para montar a sql, mas você > pode utilizar o string_to_array diretamente no campo da tabela. Ex "select > string_to_array(coluna, '/') from tabela;" > > with paths as ( > select > string_to_array(column1,'/') as array_path > from ( > values > ('/{s3bucket}/filesuser/client/27801123/attachment/4510/ > main/111/small/photo.jpg'), > ('/{s3bucket}/filesuser/client/27801123/attachment/4510/ > file/111/medium/photo.jpg') > ) as x > ) > select > array_path > from > paths > where > array_path[8]='main'; > > [1] https://www.postgresql.org/docs/current/static/functions-arr > ay.html#ARRAY-FUNCTIONS-TABLE > > Att: Camilo Santos. > Camilo, obrigado! Eu não consigo mudar a query para ser CTE, por exemplo. No meu caso, posso incluir a string_to_array num "CASE WHEN'? Para substituir o 'WHERE'? Se sim, poderia ajudar com a syntax ? Obrigado! Patrick
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
