1

コードに問題があり、それを理解しました。

SELECT
   pono,
   convert(varchar,podate,103) as podate,
   Convert(varchar,validity,103) as validity,
   OriginalPOno, Sitename, Vendorname 
FROM  dbo.tbl_POR_PO_MAIN 
WHERE originalpono not in (select originalpono from tbl_Despatch_POR_PO_Main)
  AND pono not in (select pono from tbl_Despatch_POR_PO_Main)
  AND status=15
  AND (DATEDIFF(day,getdate(),validity)<=1)
ORDER BY sitename, validity, originalpono 

これにより、次のエラーが発生します。

文字列から日時を変換するときに変換に失敗しました。

この問題を解決するにはどうすればよいですか?

4

3 に答える 3

0

MSSQL サーバーの ISDATE() 関数を使用してみてください。文字列が日付でない場合は 0 を返し、日付で変換可能な場合は 1 を返します。次の選択を実行して、正しくない文字列を確認してください。

select 'incorrect podate',  podate from dbo.tbl_POR_PO_MAIN where ISDATE(podate)=0
union all
select 'incorrect validity',  validity from dbo.tbl_POR_PO_MAIN where ISDATE(validity)=0
于 2012-08-03T07:56:12.793 に答える
0

列のデータと有効性を確認してください。この列のいずれにも文字列値があります。これが、このエラーが発生する理由です。

于 2012-08-03T06:38:23.283 に答える
-1

このスレッドを見つけました:

SQL Server は mm/dd/yyyy 形式の日付を想定しているため、送信する前に日付をこの形式に変換する必要があります。

このエラーの問題は、日付の日の値が 12 以下の場合、自動的に mm/dd/yyyy に変換され、コードが機能しているという誤った印象を与えることです。その日が13>に当たるまで、問題は醜い頭を上げません。

これが問題の可能性があるように聞こえますが、podate 構造を確認する必要があります。

于 2012-08-03T05:18:33.870 に答える