如何克服IE在显示半角空格时,把连在一起的不论多少都显示成一个半角空格的问题[转]

本文介绍了一种解决网页中半角空格显示不正常的方法,通过JavaScript将半角空格替换成全角空格,确保了从后台传来的数据显示正确。
导读:

  最简单的是加
或者在css里面加属性 white-space:pre;但是这种方法会使得自动换行这一功能失效,对于不使用表格只使用
  • 来说是致命的。

      所以才研究了以下方法:

      把原来要显示的内容用JS转换一下就可以了(我们可爱的付同志实现的),例如:

      中 间有5个空格

      替换成:

      

      

      

      这样就可以了。

      用于从后台传出的数据,才是这个方法的目的:

      

      替换为:

      

      

      

      这样半角空格的问题就完美解决了。



    本文转自

    http://hi.baidu.com/youmingwu/blog/item/bea8f7facda1f8dfb58f31cb.html
<think>我们正在讨论SQL中的LTRIM、RTRIM和TRIM函数对半角空格和全空格的支持情况。根据用户提供的引用,我们可以得出以下结论:1.引用[2]明确指出:trim()只能删除半角空格。这意味着在SQL中,标准的TRIM函数(以及LTRIM和RTRIM)默认情况下只能去除半角空格(ASCII空格,U+0020),而不能去除全空格(UnicodeU+3000)。2.引用[3]进一步证实:Rtrim只能去除半角空格。并且提供了一个例子,说明如何通过其他方法(如使用PATINDEX和SUBSTRING)来去除全空格。这暗示了内置函数对全空格的不支持。3.引用[4]描述了Oracle中TRIM函数的用法,它允许指定要删除的字符。这意味着在Oracle中,我们可以使用TRIM函数显式指定全空格来去除它。例如:```sqlSELECTTRIM(' 'FROM' 全空格字符串 ')FROMdual;```这里,全空格(' ')被明确指定为要删除的字符。4.引用[1]主要比较了SQL的TRIM函数和Excel的TRIM函数的行为差异,但未直接涉及全空格的处理。因此,我们可以总结如下:-**SQLServer**:LTRIM、RTRIM和TRIM(在SQLServer2017及更高版本中引入了TRIM函数)默认只能去除半角空格。全空格被视为普通字符,不会被这些函数默认去除。需要借助其他方法(如引用[3]中的方法)来去除全空格。-**Oracle**:TRIM函数(以及LTRIM和RTRIM)可以通过指定要删除的字符来去除全空格(如引用[4]所示)。例如,使用`TRIM(BOTH' 'FROM字符串)`或`LTRIM(字符串,' ')`。-其他数据库(如MySQL、PostgreSQL)的情况可能有所不同,但问题集中在SQL(可能指SQLServer)上。所以,针对用户的问题:-**LTRIM和RTRIM在SQLServer中**:只能去除半角空格,不能去除全空格。-**TRIM函数在SQLServer(2017+)中**:默认行为也是只去除半角空格。但可以通过指定字符来去除全空格(类似于Oracle),例如:`TRIM(' 'FROM字符串)`。注意:在SQLServer2017之前,没有内置的TRIM函数。在SQLServer2017及以上版本中,我们可以使用以下方式去除全空格:```sql--去除两侧全空格SELECTTRIM(' 'FROM列名)FROM表名;--去除左侧全空格SELECTTRIM(LEADING' 'FROM列名)FROM表名;--去除右侧全空格SELECTTRIM(TRAILING' 'FROM列名)FROM表名;```在SQLServer2016及更早版本中,由于没有TRIM函数,我们可以使用以下方法去除全空格(以去除两侧为例):```sql--去除左侧全空格(以及半角空格)SELECTLTRIM(RTRIM(REPLACE(REPLACE(列名,' ',''),'','')))FROM表名;```或者,更精确地,使用引用[3]中的方法(但该方法较复杂)。总结回答:###SQL中LTRIM、RTRIM和TRIM对半角空格和全空格的支持情况1.**半角空格(U+0020)**:-所有函数(LTRIM,RTRIM,TRIM)都默认支持去除半角空格。-示例(SQLServer):```sqlSELECTLTRIM('半角空格')AS结果;--去除左侧半角空格SELECTRTRIM('半角空格')AS结果;--去除右侧半角空格SELECTTRIM('半角空格')AS结果;--去除两侧半角空格(SQLServer2017+)```2.**全空格(U+3000)**:-**LTRIM和RTRIM(SQLServer)**:默认不支持去除全空格(引用[2][3])。-**TRIM函数(SQLServer2017+)**:默认也不支持,但可以通过指定要删除的字符来去除全空格(引用[4]的语法类似,但SQLServer的TRIM函数也支持这种语法):```sql--去除两侧全空格SELECTTRIM(' 'FROM' 全空格字符串 ')AS结果;--去除左侧全空格SELECTTRIM(LEADING' 'FROM' 全空格字符串')AS结果;--去除右侧全空格SELECTTRIM(TRAILING' 'FROM'全空格字符串 ')AS结果;```-**Oracle**:TRIM、LTRIM、RTRIM可以通过指定字符去除全空格(引用[4]):```sqlSELECTTRIM(BOTH' 'FROM' 全空格字符串 ')FROMdual;SELECTLTRIM(' 全空格字符串',' ')FROMdual;SELECTRTRIM('全空格字符串 ',' ')FROMdual;```3.**其他数据库**:-MySQL:TRIM默认也不去除全空格,但同样可以通过指定字符去除。-PostgreSQL:类似,使用`TRIM(BOTH' 'FROM字符串)`。###注意事项-在SQLServer中,全空格被视为普通字符,因此内置的LTRIM和RTRIM不会处理它。需要显式指定。-如果字符串中混合了半角和全空格,可能需要分别处理,或者先将全空格替换为半角空格再使用TRIM(但这可能会改变数据)。###代码示例(SQLServer)去除字符串两侧的全空格半角空格:```sql--方法1:使用TRIM(SQLServer2017+)SELECTTRIM(''FROMTRIM(' 'FROM' 混合空格字符串  '))AS结果;--方法2:使用替换和TRIM(如果版本支持)SELECTTRIM(REPLACE(REPLACE(' 混合空格字符串  ',' ',''),'',''))AS结果;```###总结表|函数|半角空格支持|全空格支持(默认)|全空格支持(指定字符)|适用数据库版本||------------|-------------|----------------------|--------------------------|---------------------||LTRIM|是|否|否(SQLServer)|所有版本||RTRIM|是|否|否(SQLServer)|所有版本||TRIM|是|否|是(需指定)|SQLServer2017+||TRIM(指定)|是(可指定)|是(可指定)|是(可指定)|SQLServer2017+||Oracle的TRIM|是(默认)|否(默认)|是(指定字符)|Oracle|因此,在SQL中(特别是SQLServer),要同去除半角和全空格,我们需要:1.对于SQLServer2017+,使用`TRIM`函数并显式指定全空格字符(以及半角空格,如果需要同去除)。2.对于旧版本,需要结合使用`REPLACE`和`LTRIM`/`RTRIM`,或者使用更复杂的字符串函数。[^2][^3][^4]§§相关问题§§1.在SQLServer2016及更早版本中,如何有效去除字符串中的全空格?2.不同数据库(MySQL,PostgreSQL,Oracle)中去除全空格的方法有何异同?3.如何设计一个通用的SQL函数来同去除半角和全空格?4.在数据清洗中,处理混合空格的最佳实践是什么?</think>### SQL中LTRIM、RTRIM和TRIM函数对半角/全空格的支持情况 #### 1. **核心结论** - **半角空格(ASCII U+0020)**:所有函数默认支持去除 ✅ - **全空格(Unicode U+3000)**: - **LTRIM/RTRIM**:**默认不支持** ❌(仅限半角) - **TRIM**:**可通过参数显式支持** ✅(需指定字符) #### 2. **详细分析(基于引用)** ##### (1) LTRIM/RTRIM 的局限性 - **仅支持半角空格**: 引用[2][^2]和引用[3][^3]明确指出: > `LTRIM()`删除字符串左边的空格,`RTRIM()`删除字符串右边的空格。 > **`trim()只能删除半角空格`**(此处指SQL基础函数) > `declare @Str varchar(500) set @Str='1 3  '` > **`Rtrim只能去除半角空格`** 示例: ```sql SELECT RTRIM('Hello ') -- 返回 'Hello '(全空格未被去除) ``` ##### (2) TRIM 的扩展能力 - **支持显式指定全空格**: 引用[4][^4]说明Oracle的`TRIM`可通过参数处理任意字符: > `trim([leading|trailing|both] trim_char from string)` > 示例: > ```sql > SELECT TRIM('中' FROM '中秋八月中') -- 去除两侧'中'字 > ``` **全空格处理示例**: ```sql -- 去除两侧全空格 SELECT TRIM(BOTH ' ' FROM ' 全空格 ') AS Result; -- 返回 '全空格' -- 仅去除左侧全空格 SELECT TRIM(LEADING ' ' FROM ' 左侧全空格') AS Result; ``` #### 3. **各函数对比总结** | 函数 | 半角空格支持 | 全空格支持 | 关键语法示例 | |---------|-------------|----------------------|---------------------------------| | **LTRIM** | ✅ 默认 | ❌ 不支持 | `LTRIM(' text')` | | **RTRIM** | ✅ 默认 | ❌ 不支持 | `RTRIM('text ')` | | **TRIM** | ✅ 默认 | ✅ **需显式指定字符** | `TRIM(BOTH ' ' FROM ' text ')` | #### 4. **全空格处理方案** ##### (1) 通用方法(跨数据库) ```sql -- 去除两侧全空格(替换+TRIM组合) SELECT TRIM(REPLACE(REPLACE(' 混合 空格 ', ' ', ' '), ' ', ' ')) AS CleanText; ``` ##### (2) SQL Server 专用方案 引用[3][^3]的扩展方法: ```sql DECLARE @Str VARCHAR(500) = ' 全 空格 '; SELECT SUBSTRING( @Str, PATINDEX('%[^  ]%', @Str), -- 找到第一个非空格字符位置 LEN(@Str) - PATINDEX('%[^  ]%', REVERSE(RTRIM(@Str))) - PATINDEX('%[^  ]%', @Str) + 2 ) AS Result; ``` ##### (3) Oracle 优化方案 直接使用`TRIM`参数化: ```sql SELECT TRIM(BOTH ' ' FROM 字段) AS 去全空格, TRIM(字段) AS 去半角空格 FROM 表名; ``` #### 5. **注意事项** 1. **语法差异**: - SQL Server 2017+ 支持`TRIM(LEADING ' ' FROM str)` - Oracle/MySQL 支持`TRIM(BOTH ' ' FROM str)` - 旧版SQL Server 需用`LTRIM(RTRIM(REPLACE(str, ' ', ' ')))`组合[^3] 2. **全空格识别**: 全空格在SQL中视为普通字符,**非默认空白字符**,因此需显式指定[^2][^4]。 3. **空值处理**: 若字符串为`NULL`,所有函数均返回`NULL`(引用[1][^1])。 [^1]: SQL的TRIM仅处理首尾空格,不处理中间空格 [^2]: TRIM()默认只能删除半角空格 [^3]: RTRIM无法去除全空格,需用PATINDEX+SUBSTRING [^4]: TRIM可通过参数指定删除任意字符(包括全空格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值