2017-11-19 15 views
0

私は以下のように構成されたトリプルを持っています。SPARQLの文字列値から日付範囲を見つける

<nc:person1> <nc:hasDate> "201701" 
<nc:person2> <nc:hasDate> "201703" 
<nc:person3> <nc:hasDate> "201705" 
<nc:person4> <nc:hasDate> "201706" 
<nc:person5> <nc:hasDate> "201606" 

ここで、トリプルのオブジェクト部分には、文字列形式の日付情報が含まれています。まず、日付の4桁は年を表し、最後の2桁は月を表します。たとえば、「201701」では2017が年、01が1月を意味します。

私は、2017年3月から2017年6月までのすべての日付を見つけるためにSPARQLクエリを書く必要があります。結果は次のようになります。

"201703" 
"201705" 
"201706" 

私は、次のようなSPARQLクエリを記述する必要があると思う:

SELECT ?date WHERE{ 
?person nc:hasdate ?date.FILTER(?) 
} 

私は私が書くために必要なものをフィルタ条件を確認していません。文字列を日付として解析して日付範囲を見つける方法を教えてください。前もって感謝します。

+1

私はあなたがそれを解析する必要はないと思う。 ISO形式の日付文字列の場合は、直接比較で十分です。 – Sirko

+0

ご返信ありがとうございます。フィルターの状態を書き込む方法を教えてください。 –

+1

なぜあなたは適切な日付リテラルを使用しないのか分かりませんが、あなたのタイプの日付文字列に対して辞書式の比較が機能するかもしれません: 'FILTER(?date> =" 201703 "&&?date" = "201706" – AKSW

答えて

2

だから私はそれをテストした(念のため)と直接文字列比較は、上記の例のために働く:これが唯一のISO準拠の日付文字列のために働くことを

SELECT ?date 
WHERE { 
    ?person nc:hasDate ?date . 
    FILTER((?date > "201702") && (?date < "201707")) 
} 

注意を。他の形式は失敗することがあります。

関連する問題