5

私はこのクエリを持っています

SELECT W.NUMBER,B.NAME,Br.NAME,W.WDATE,W.REPAIRSTATUS,W.REPAIRCOST,W.REMARK
FROM Work_Order AS W,Brands AS B,Branches AS Br
WHERE W.BRANDID = B.ID AND W.BRANCHID = Br.ID
AND CAST(WDATE as DATETIME)  < CAST('09/18/2012' AS DATETIME)

システムは次のように応答します

charデータ型をdatetimeデータ型に変換すると、datetime値の範囲外になりました。

このクエリも使用すると、同じエラーが発生します

SELECT W.NUMBER,B.NAME,Br.NAME,W.WDATE,W.REPAIRSTATUS,W.REPAIRCOST,W.REMARK
FROM Work_Order AS W,Brands AS B,Branches AS Br
WHERE W.BRANDID = B.ID AND W.BRANCHID = Br.ID
ORDER BY CAST(W.WDATE AS DATETIME)

WDATEは「2012年9月3日」のようなもので、mm / dd/yyyyの日付形式のjqueryuidatepickerからの入力です。

修正方法がわからないので助けてください。

私はSQLServer2005に取り組んでいます。

編集:私は別のSQLサーバー2005で同じクエリを試しましたが、正常に動作しているので、SQLサーバー設定でこのエラーを修正する方法を教えてください??

4

1 に答える 1

2

WDATEはvarchar/charであり、本来のデータ型ではないと思います。このようにキャストできますが、データ型をdatetimeに変更することをお勧めします。これを試して:

SELECT W.NUMBER,B.NAME,Br.NAME,W.WDATE,W.REPAIRSTATUS,W.REPAIRCOST,W.REMARK 
FROM Work_Order AS W,Brands AS B,Branches AS Br 
WHERE W.BRANDID = B.ID AND W.BRANCHID = Br.ID 
AND CONVERT( DATETIME, WDATE, 101) < CONVERT( DATETIME, '09/18/2012', 101)

このコードを試してみてください。無効な日付のほとんどが見つかるはずです。

SELECT WDATE, W.NUMBER,B.NAME,Br.NAME,W.WDATE,W.REPAIRSTATUS,W.REPAIRCOST,W.REMARK 
FROM Work_Order AS W,Brands AS B,Branches AS Br 
WHERE W.BRANDID = B.ID AND W.BRANCHID = Br.ID 
AND WDATE not like '[0-1][0-9]/[0-3][0-9]/20[0-1][0-9]'
于 2012-09-20T11:45:38.867 に答える