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

Responder a