(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就是最後一條)會報錯
求解!

解决方案 »

  1.   

    小于和等于可以写在一起。你的是啥错误,可能截取道德诗句不是转换成int类型的所以就
      

  2.   

    where  SUBSTRING(CARCONDITION.RENTSTARTTIME,8,4)>=0
    and SUBSTRING(CARCONDITION.RENTSTARTTIME,8,4)<=1159
    这样写就行
      

  3.   

    估计是被转换的列含有不能转换成bigint类型的字符。你仔细检查一下数据表
      

  4.   

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

  5.   

    已經確保就是一個bigint類型的值了  都是數字的
      

  6.   

    翻译过来
    消息 512,级别 16,状态 1,第 1 行
    子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。就是子查询返回的记录行数必须只能是一行,不能是多行
      

  7.   

    你的这段查询是没什么错误的,可能是你把它作为子查询,而把查询结果作为主查询 select 列表中的一员.
    原来用一句查,可能只有一个结果,而加了 or 以后,会出来多个结果,因此出错.建议:
    单独执行
    select CARCONDITION.COND
    ....
    ) =0)
    看有几条记录,如果有多条记录,是否可以考虑把它作为一个子查询与原来的查询连接而获得结果.