我花了很多时间试图解决这个问题......看了几十个其他答案。
我在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), '')
答案 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。