数据库里对应id是1111111111的数据是:
Type  varchar (255)  = 0
Address1   varchar (255) = 'fuan dajie'
Address2  varchar (255) = 'number 105'
Address3  varchar (255) = NULL
City varchar (255) = 'Beijing'
PostalCode varchar (255) = '400255'
Phone varchar (255) = '101456789'
FAX varchar (255) = ''
CellPhone varchar (255) = '136589756'要求通过where子句能得到字符串的长度大于0的值,问下面的sql是否正确?我看了半天也没发现不对的地方。是不是LTRIM函数不能用在NULL或者“”上?LTRIM(Address3) 或者LTRIM(FAX) 时会报错?
SELECT * FROM table1
WHERE ISNULL (Type, '') <> ''
  AND LEN (LTRIM(Address1) + 
 LTRIM(Address2) + 
                         LTRIM(Address3) + 
 LTRIM(City) + 
 LTRIM(PostalCode) + 
 LTRIM(Phone) + 
 LTRIM(FAX) +
 LTRIM(CellPhone) ) > 0
AND id = 1111111111

解决方案 »

  1.   

    ltrim 的参数可以是 null 或 空字符串。只是,你这里有一个 len ,这个函数,是不是你自定义的? 如果不是,你换成 length 试试
      

  2.   

    测试 Ltrim的参数可以为null或者‘’1、ISNULL (Type, '') <> ''   这个返回结果是假(任何结果与‘’比较都是假)  改为Type   is not null2、LTRIM(City) +  LTRIM(PostalCode)  没看出来 测试后想起 字符串貌似不能直接用‘+’  用’||‘