2017-12-02 9 views
0

私はデータベースからURLを取得し、プロセスでわずかに再フォーマットする必要があります。 db内の一部のURLにはポート番号が指定されていますが、一部のポート番号は指定されていません。私は、Prestoの便利なURL extraction functions(url_extract_portなど)を使用しています。Presto URL関数

しかし、次のSQLでは、ポートが指定されていないURLに遭遇すると、実際にはnullでない行に対してもnullが返されます。 (私はurl_extract_port機能を削除した場合、私はポートなしでリンク値を取得しますが、。)

SELECT 
    concat(
    url_extract_protocol(link) 
    ,'://' 
    ,url_extract_host(link) 
    ,':' 
    ,cast(url_extract_port(link) AS VARCHAR) 
) 
    AS url 
FROM db.schema.urltable 
WHERE link is not null 

私は唯一のポートが指定されている場合url_extract_portを使用するSQLで指定する方法はありますか?ポートは、nullを返すurl_extract_port存在しない場合に

,coalesce(cast(url_extract_port(link) AS VARCHAR),'') 

+0

ケース式は? 'case url_extract_port(link)> 0、次にx else y end' –

+0

良いアイデア。しかし、ここでも合体(value1、value2)が良いかどうかは疑問です。 2番目の値は空白になります。多分それは大丈夫です。 –

+0

具体的には、cast(coalesce(url_extract_port(link)、 ""))を試してみます。 –

答えて

0

coalesce機能は、url_extract_port線に変更して、問題を解決します。したがって、coalesceで示されているように使用すると、その代わりにデフォルト値(この場合は空の文字列)が返されます。