none
null的處理 RRS feed

  • 問題

  • 請問我目前有張資料表的欄位為A

    裡面是完全沒有任何值的欄位

    然後將它跟別的資料表left join後

    欄位值全部都出現null


    為了處理這些null

    我用了isnull(a,' ')

    想把這些null改成空白

    結果居然會出現數字0???

    這是為什麼呢??

    有甚麼方法可以把null改成空白嗎??

    2012年1月18日 上午 08:06

解答

  • 我想問題可能出在於ISNULL的回傳值會被隱含轉換為和check_expression相同的資料類型,因此如果你的a欄位是int,經過isnull就會變成0。

     

    ISNULL ( check_expression , replacement_value )
    


    參考資料:http://msdn.microsoft.com/zh-tw/library/ms184325.aspx

    或許你可自行轉換成字串之後就可以顯示為空字串了。

    declare @t1 table
    (c1 int,c2 int)
    declare @t2 table
    (c3 int, c4 int)
    
    insert into @t1 values (1,1),(2,2),(3,null)
    insert into @t2 values (1,10),(2,20),(4,40)
    
    select c1,ISNULL(cast(c2 as varchar),'')
    ,ISNULL(cast(c3 as varchar),''),ISNULL(cast(c4 as varchar),'')
    from @t1 a
    left join @t2 b
    on a.c2 = b.c3
    


     

     

     


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2012年1月18日 上午 09:55
    版主

所有回覆

  • 我想問題可能出在於ISNULL的回傳值會被隱含轉換為和check_expression相同的資料類型,因此如果你的a欄位是int,經過isnull就會變成0。

     

    ISNULL ( check_expression , replacement_value )
    


    參考資料:http://msdn.microsoft.com/zh-tw/library/ms184325.aspx

    或許你可自行轉換成字串之後就可以顯示為空字串了。

    declare @t1 table
    (c1 int,c2 int)
    declare @t2 table
    (c3 int, c4 int)
    
    insert into @t1 values (1,1),(2,2),(3,null)
    insert into @t2 values (1,10),(2,20),(4,40)
    
    select c1,ISNULL(cast(c2 as varchar),'')
    ,ISNULL(cast(c3 as varchar),''),ISNULL(cast(c4 as varchar),'')
    from @t1 a
    left join @t2 b
    on a.c2 = b.c3
    


     

     

     


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2012年1月18日 上午 09:55
    版主
  • 原來跟型態有關啊...

    之前用欄位都是字串用的很順

     

    突然來個整數型態的欄位

    也沒去注意是資料型態的關係 才會導致顯示0

     

    真是謝謝你:)

    2012年1月19日 上午 02:02