none
不是空格吗?删除不掉的。 RRS feed

  • 问题

  • 把一份excel导入到sql2000,有个城市字段,竟然去除不掉空格,用了各种方法,难道不是空格?

    declare @a varchar(100)
    select @a=replace((N'赣州 '),' ','')
    select @a=rtrim((N'赣州 '))

    select len(@a)

    我用手敲一个空格又能删除掉,这里始终都是3个长度了,怪了啊,这个是什么,我直接拷贝那个空格后,用replace也不行,替换不了,怎么回事。

    2011年8月24日 3:50

答案

  • 你好,

    请问你的数据是Non-Unicode 文本类型,char, varchar, text?如果是,可能是因为这中类型的数据是以单个代码页存储的,当一个字符在给定的代码页无法被转换的时候,就会以“?“代替。你可以尝试用Unicode数据类型,如nchar,n varchar。

    详细信息,请参考这个文章中Non-Unicode Text Types: char, varchar, text段落的描述:http://msdn.microsoft.com/zh-cn/library/aa902644(v=SQL.80).aspx.


    Best Regards,
    Stephanie Lv

    Forum Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.
    • 已标记为答案 fangyanqin 2011年8月26日 1:12
    2011年8月25日 9:01

全部回复

  • 試試看以下列方式:

    declare @a nvarchar(100)
    select @a=ltrim(rtrim(N' 赣州 '))
    
    select len(@a)
    



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月24日 4:38
  • 可能是全角空格,也可能是tab等字符.
    想不想时已是想,不如不想都不想。
    2011年8月24日 5:07
    版主
  • 試試看以下列方式:

     

    declare @a nvarchar(100)
    
    
    
    select @a=ltrim(rtrim(N' 赣州 '))
    
    
    
    
    
    
    
    select len(@a)
    
    
    
    


     


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    手工敲入的空格,对于函数ltrim,rtrim还有可以去除的,你试试拷贝我的这个字符串,在你的数据库中可以去掉吗,
    显然这位兄弟没认真看清问题的所在,嘿嘿
    2011年8月24日 5:38
  • 可能是全角空格,也可能是tab等字符.
    想不想时已是想,不如不想都不想。

     能否给个脚本
    2011年8月24日 5:40
  • 怪哉。。declare @a varchar(100)
    select  @a= '赣州 '
    select @a

    返回结果:赣州?

    本地字符集的问题吗?空格怎么的变问号,我说在怎么写了n种替换方法无效啊,但是在数据表中又看不到问号,这不是怪啊




    2011年8月24日 5:54
  • 抱歉,我會錯您的意思了嗎?因為我有把你的程式貼到我這邊來測試,看起來都是正常的長度,如下圖所示:

    或許是如怡紅公子前輩所說的全形空格所造成,你不妨從這個方向去找找看。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月24日 5:57
  • 似乎遇到了大麻烦了,在导入的数字列中,都带了个隐藏的符号:?,注意是看不到的,我尝试用这各种替换方式:

    replace(columnas,'?','')

    replace(columns,char(63),'')

    都不能去掉这个隐藏在数字中的:?,很多数字列都有,导致无法转换数据类型,无法插入数据到表中


    我的是sql2000
    2011年8月25日 7:22
  • 你好,

    请问你的数据是Non-Unicode 文本类型,char, varchar, text?如果是,可能是因为这中类型的数据是以单个代码页存储的,当一个字符在给定的代码页无法被转换的时候,就会以“?“代替。你可以尝试用Unicode数据类型,如nchar,n varchar。

    详细信息,请参考这个文章中Non-Unicode Text Types: char, varchar, text段落的描述:http://msdn.microsoft.com/zh-cn/library/aa902644(v=SQL.80).aspx.


    Best Regards,
    Stephanie Lv

    Forum Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.
    • 已标记为答案 fangyanqin 2011年8月26日 1:12
    2011年8月25日 9:01
  • 你好,

    请问你的数据是Non-Unicode 文本类型,char, varchar, text?如果是,可能是因为这中类型的数据是以单个代码页存储的,当一个字符在给定的代码页无法被转换的时候,就会以“?“代替。你可以尝试用Unicode数据类型,如nchar,n varchar。

    详细信息,请参考这个文章中Non-Unicode Text Types: char, varchar, text段落的描述:http://msdn.microsoft.com/zh-cn/library/aa902644(v=SQL.80).aspx.


    Best Regards,
    Stephanie Lv

    Forum Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.


    这位大哥说的比较靠谱一些,不过是不是你说反了,按照你给出的思路,我首先检查字段类型:[数量] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,

    我在该字段上执行一个转换后:


    select  convert(varchar(100),[数量])  from mytt

    返回结果:

    62?

    33?

    34?

    这样替换就可以了,
    select  replace(convert(varchar(100),[数量]),'?','')  from mytt

    不过这个原因还没搞清,版主厉害,同时感谢各位热情的支持,多谢

    2011年8月26日 1:11
  • 这个倒不是他说反了,是因为批量导入数据时,sql 2000没有检查数据完整性,导致出现了半个字符或不可显示的字符。转换为varchar就显示为?。
    想不想时已是想,不如不想都不想。
    2011年8月26日 3:29
    版主