2017-09-27 10 views
0

私はdocdbを使用しています。私はの日付でprocessTimeを照会したいと思います。私の入力pdate = 26-09-2017これはdateonlyです。私はキャスト関数を使用してdatetimeをSQLクエリの日付に変換していますが、構文エラーが発生しています。私はc#でこれをやっています。 LINQクエリ用datetimeの代わりに日付を問い合わせるdocdb

私は以下のjsonをドキュメントdbに持っています。私はCAST機能の近くに構文エラーを取得しています

  new SqlQuerySpec() 
      { 
       QueryText = "SELECT * FROM cols e WHERE e.submittedBy = @ci AND CAST(e.processTime AS int) = @date", 
       Parameters = new SqlParameterCollection() 
       { 
       new SqlParameter("@ci", cid.ToString()), 
       new SqlParameter("@date", pdate) 
       } 
      }, DefaultOptions); 

を次のように

[{ 
"processTime": "2017-09-26T21:05:28.7954106+05:30", 
"submittedBy": "671" 
} 
{ 
"processTime": "2017-09-26T21:05:28.7954106+05:30", 
"submittedBy": "679" 
} 
{ 
"processTime": "2017-09-26T21:05:28.7954106+05:30", 
"submittedBy": "679" 
} 
] 

私は、DBを照会しています

{"Message: {\"errors\":[{\"severity\":\"Error\",\"location\":{\"start\":61,\"end\":65},\"code\":\"SC1001\",\"message\":\"Syntax error, incorrect syntax near 'CAST'.\"}]}\r\nActivityId: 5661ff3b-64cb-46d7-8c9e-0125145a8fb3"} 

答えて

1

でAAAA-MM-DDにDD-MM-AAAAからあなたpdate値を変換する必要があります。しかし、ISO-8601フォーマットの美しさは、文字列の比較だけでもできることです。だから、SQLクエリは次のようになります。

SELECT * FROM cols e WHERE e.submittedBy = @ci AND STARTSWITH(e.processTime, @dateString) 

@dateStringは「2017年10月20日」のような形式の文字列でなければなりません。

また、このように日付範囲を指定することもできます。また、非公開演算子>および< =を使用して、submittedByフィールドに範囲インデックスがある限り、日付範囲を指定することもできます。ただし、範囲内の2番目の日付は排他的で、最初の日付は包括的です。

私はまた、あなたがタイムシフト形式のISO-8601の文字列を使用することに注意してください。単一のクエリのデータに常に同じシフトがあることを確認できれば、問題ありません。ただし、それ以上の制御が必要な場合は、zulu時間(GMT)で格納し、照会時に文字列リテラルを調整して照会時にシフトを実行します。私はこのアプローチを要点hereに書いており、その書き方で述べたtzTimeとLumenizeライブラリは、そのアプローチを容易にするために作られたものです。

1

の日だけを取得するために、DATE()関数を使用してみてくださいこのようなprocessTimeコラム:

 new SqlQuerySpec() 
     { 
      QueryText = "SELECT * FROM cols e WHERE e.submittedBy = @ci AND DATE(e.processTime) = STR_TO_DATE(@date,'%d-%m-%Y')", 
      Parameters = new SqlParameterCollection() 
      { 
      new SqlParameter("@ci", cid.ToString()), 
      new SqlParameter("@date", pdate) 
      } 
     }, DefaultOptions); 
それが動作するようにナチョの答えが見え@

あなたは

STR_TO_DATE(pdate,'%Y-%m-%d') 
関連する問題