繁体   English   中英

带尾随空格的CHAR行为

[英]CHAR behavior with trailing spaces

给定下面的SQL语句,我希望查询的结果是:

|testX|5|
|XXXXX|5|

这是因为该列是char(5),并且我希望它插入空白尾随空格以填充该列中的剩余空间,因为插入的值少于五个字符。 但是,查询实际上会产生以下结果:

|test|4|
|X|0|

有人可以解释一下吗。 为什么不用尾随空格填充值以使它们填满长度5列? 为什么当第二个值完全为空字符串时,REPLACE函数会为第二个值插入单个X?

USE Test;
GO

SET ANSI_PADDING ON;
GO

CREATE TABLE BlankTest
(
    Value char(5) NOT NULL
);
GO

INSERT INTO BlankTest (
    Value
) VALUES (
    'test'
);
GO

INSERT INTO BlankTest (
    Value
) VALUES (
    ''
);
GO

SELECT REPLACE(Value, ' ', 'X'), LEN(Value)
FROM BlankTest;
GO

DROP TABLE BlankTest;

REPLACE返回varchar

尝试此SELECT

...REPLACE(Value, ' ', 'ZZZZZZZZZ')

当然不能是char(5),那是什么

...SQL_VARIANT_PROPERTY (REPLACE(Value, ' ', 'ZZZZZZZZZ'), 'MaxLength')...

8000,最大varchar ...

编辑:

  1. 我聪明的alec同事提醒我,您需要使用DATALENGTH包含尾随空格,而不要使用LEN。 在这里经常问

  2. WHERE value = 'test' 这里的“测试”是varchar,它的优先级(固定)比char高,因此该列将转换为varchar,从而有效地截断

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM