日期:2014-05-18  浏览次数:20621 次

cast轉化問題
(select CARCONDITION.CONDITIONDIV from CARCONDITION 
  where (CAST(SUBSTRING(cast(CARCONDITION.RENTSTARTTIME as nvarchar),8,4)as bigint) <1159
  or CAST(SUBSTRING(cast(CARCONDITION.RENTSTARTTIME as nvarchar),8,4)as bigint) =1159) 


  and (CAST(SUBSTRING(cast(CARCONDITION.RENTSTARTTIME as nvarchar),8,4)as bigint)>0
  or CAST(SUBSTRING(cast(CARCONDITION.RENTSTARTTIME as nvarchar),8,4)as bigint) =0)
 )as AM
and前面的區別就是後面的比較值(1159 和0 不一樣)
但是下面的(=0就是最後一條)會報錯
求解!

------解决方案--------------------
探讨
Msg 512, Level 16, State 1, Line 1
サブクエリは複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後に続く場合や、サブクエリが 1 つの式として使われる場合は複数の値は許可されません。

------解决方案--------------------
你的这段查询是没什么错误的,可能是你把它作为子查询,而把查询结果作为主查询 select 列表中的一员.
原来用一句查,可能只有一个结果,而加了 or 以后,会出来多个结果,因此出错.

建议:
单独执行
select CARCONDITION.COND
....
) =0)
看有几条记录,如果有多条记录,是否可以考虑把它作为一个子查询与原来的查询连接而获得结果.
------解决方案--------------------
子查询是一个集合 应该用IN 而不能直接用等于号。