1

SQL Server CompactでWebMatrixを使用していますが、簡単な質問があります。コードの行があります:

if(cndDateLastModified=="gteq"){stringCompiler+="'CAST(DateLastModified AS datetime)' >= 'CAST(" + DateLastModified + " AS datetime)' ";}////

画面に出力をプロットすると、クエリは具体的に次のようになります。

SELECT * FROM POITable WHERE 'CAST(DateLastModified AS datetime)' >= 'CAST(09/25/2012 AS datetime)'

何らかの理由で、指定された日付の前、上、および後のすべての行を返します。クエリに関してはまだ少し環境に配慮していますが、調査したすべてのアカウントで、これは機能するはずです。明らかに、それは私がまったく期待していないことをしていることを考えれば理解できます。

これを希望どおりに機能させる方法についてのアイデアはありますか?それでも文字列やその他の形式を比較しようとしていますか?

注:両方の変換で、CONVERT(datetime、DateLastModified)とCONVERT(datetime、DateLastModified、1)を使用してこれを試しました。

別の注意:それは文字列としてデータベースに保存されます。

別の注意:条件を(> =から<=に)切り替えると、逆になり、行が返されません。これは、最初の予期しない結果セットを考慮すると予想されますが、それでも理由はわかりません。

何か案は?

4

2 に答える 2

3

一重引用符で2つの文字列を比較しているためです。「CAST(....)」と「CAST(...)」。WHERE'Ginger'> ='Fred'と書いた方が、同じ結果が得られます。:D

必要なものは次のとおりです。FROMPOITableWHERECAST(DateLastModified AS datetime)> = CAST('09 / 25/2012'AS datetime)

文字通りの日付を一重引用符で囲みます。'2012年9月25日'

ただし、SQLサーバーを使用している場合は、WHERE CAST(DateLastModified AS datetime)>='2012-09-25'を使用できます。

さらに、テーブルのDateLastModified列がすでに日時である場合は、キャストを削除します。Castは、文字列をデータ型に変換するためのものです。私の勘はあなたが必要とするすべてです:

WHERE DateLastModified >= '2012-09-25' /* ISO date strings are understood and accepted by SQL Server. */
or
WHERE DateLastModified >= GETDATE() /*Everything in the future, time inclusive.*/
or
WHERE DateLastModified >= DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) /* Everything starting today. */
于 2012-09-26T21:45:54.200 に答える
1

このようにする必要があります

stringCompiler+="CAST(DateLastModified AS datetime) >= CAST('" + DateLastModified + "' AS datetime) "

一重引用符の位置が変更されていることに注意してください

それはあなたに

CAST(DateLastModified AS datetime) >= CAST('09/25/2012' AS datetime) 
于 2012-09-26T21:47:05.240 に答える