SQL -how删除所有ASCII字符(字段输入后的空格)

时间:2016-09-30 13:20:16

标签: sql sql-server replace ascii

我花了很多时间试图解决这个问题......看了几十个其他答案。

我在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), '')

2 个答案:

答案 0 :(得分:2)

你必须区分

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

在您的情况下,您正在处理固定宽度。这意味着,字符串始终填充到其定义的长度。 固定宽度字符串与行中的datetime或int值一起使用。

如果您将列定义为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() - 函数为您提供实际使用的空间

答案 1 :(得分:0)

char(32)将占用所有32个字符。

如果要修剪和存储它,则应使用varchar(32)。

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