转换失败sql中的错误

时间:2012-08-03 05:09:06

标签: sql sql-server sql-server-2005

我的代码中存在问题,我想出来了:

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 

这给我一个以下错误:

  

从字符串转换日期时转换失败。

如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

请检查列podate中的数据和有效性。此列中的任何一列都具有字符串值。这就是你得到这个错误的原因。

答案 1 :(得分:0)

尝试使用MSSQL服务器ISDATE()函数如果字符串不是日期则返回0,如果是日期则返回1并且可以转换。尝试运行以下select并检查不正确的字符串:

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

答案 2 :(得分:-1)

找到this thread

  

SQL Server需要格式为mm / dd / yyyy的日期,因此您需要这样做   在提交之前将您的日期转换为此格式。

     

此错误的问题在于,如果日期的日期值为   &lt; = 12,它会自动转换为mm / dd / yyyy给你   您的代码工作的错误印象。它直到白天   命中13&gt;这个问题引起了它的丑陋。

听起来这可能是个问题,maby你应该看看podate结构。