【问题标题】:SQL -how to remove all ASCII char (blanks after field entry)SQL - 如何删除所有 ASCII 字符(字段输入后的空白)
【发布时间】:2017-02-09 02:14:19
【问题描述】:

我花了很多时间试图弄清楚这一点....寻找许多其他答案。

我在 SQL Server 中有一个表,其中有一列类型为 Char(32) NULL。表格列中的所有项目都只有char(9),但我在剩余的位置有空白(运行select ascII(right(myField, 1))时那里有一个32)。

我尝试了替换,尝试从 tempTable 更新字段尝试从 tempTbl 删除和更新.....每次我选择...字段的长度仍为 30。

有没有办法删除所有多余的空格?还是这只是 CHAR 字段始终工作的方式?

我试过了:

UPDATE table  
SET myfield = rtrim(replace(myField , char(160), char(32)))

UPDATE mytable
SET myField  = REPLACE(RTRIM(LTRIM(myField )), CHAR(32), '')

【问题讨论】:

  • 值将始终为 32 个字符,因为您的数据类型是 CHAR(32)。这将用空格正确填充值,直到达到 32。如果您不希望填充空格,则应考虑使用 varchar(32) 代替。

标签: sql sql-server replace ascii


【解决方案1】:

你必须区分

  • 固定宽度
  • 的字符串
  • 可变宽度的字符串。

在您的情况下,您正在处理固定宽度。这意味着,字符串总是被填充到它定义的长度。 固定宽度字符串与日期时间或整数值一起存在行内

如果您将列定义为VARCHAR(32)(意思是可变字符),“32”只是限制最大长度。这些值存储(在大多数情况下)某处行的存储空间之外,而只有一个指针指向实际的存储位置排。

固定长度比可变字符串稍快。但在大多数情况下,我建议您更喜欢VARCHAR(x)

看看这个:

DECLARE @fix CHAR(32)='test';
DECLARE @variable VARCHAR(32)='test';

SELECT LEN(@fix),DATALENGTH(@fix)
      ,LEN(@variable),DATALENGTH(@variable)

这会导致

4,32,4,4
  • LEN()-函数不计算尾随空格
  • DATALENGTH()-函数为您提供实际使用的空间

【讨论】:

  • 很好的解释......好吧......是的,所以我想我们将不得不更改为 varchar 以获得我们真正需要的东西。非常感谢。
【解决方案2】:

char(32) 将占用全部 32 个字符。

如果你希望它被修剪和存储,你应该使用 varchar(32)。

尝试将您的字段转换为 varchar。

【讨论】:

    猜你喜欢
    • 2018-03-04
    • 2011-06-21
    • 1970-01-01
    • 2017-08-26
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    相关资源
    最近更新 更多