我正在学习如何使用len()功能.当我发现一个有12个字符的单元格的长度时,它给了我结果12.现在我认为SQL字符串无效终止(好像它们本来len()应该已经返回13而不是12)?
请帮帮我.
谢谢
小智 11
好吧,首先 - len函数不依赖于null终止,不使用null终止的编程语言ALSO有一个len函数.
因此,SQL中的len函数将为您提供字符串的长度作为服务器存储它 - 您关心它是如何工作的?
实际上它可能不会被终止,因为这会使字符串在多个数据库页面上分割变得困难.即使 - 这将严重依赖于实现(并且您没有说出您的意思是哪种产品 - SQL语言没有说明服务器如何在内部存储字符串).
所以,最后你的问题完全无关紧要.所有相关的是len函数实现与内部存储兼容.
在SQL Server中,LEN将忽略尾随空格(http://msdn.microsoft.com/en-us/library/ms187403.aspx) - 这是来自该链接的修改示例:
PRINT 'Testing with ANSI_PADDING ON'
SET ANSI_PADDING ON ;
GO
CREATE TABLE t1
(
charcol CHAR(16) NULL
,varcharcol VARCHAR(16) NULL
,varbinarycol VARBINARY(8)
) ;
GO
INSERT INTO t1
VALUES ('No blanks', 'No blanks', 0x00ee) ;
INSERT INTO t1
VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00) ;
SELECT 'CHAR' = '>' + charcol + '<'
,'VARCHAR' = '>' + varcharcol + '<'
,varbinarycol
,LEN(charcol)
,LEN(varcharcol)
,DATALENGTH(charcol)
,DATALENGTH(varcharcol)
FROM t1 ;
GO
PRINT 'Testing with ANSI_PADDING OFF' ;
SET ANSI_PADDING OFF ;
GO
CREATE TABLE t2
(
charcol CHAR(16) NULL
,varcharcol VARCHAR(16) NULL
,varbinarycol VARBINARY(8)
) ;
GO
INSERT INTO t2
VALUES ('No blanks', 'No blanks', 0x00ee) ;
INSERT INTO t2
VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00) ;
SELECT 'CHAR' = '>' + charcol + '<'
,'VARCHAR' = '>' + varcharcol + '<'
,varbinarycol
,LEN(charcol)
,LEN(varcharcol)
,DATALENGTH(charcol)
,DATALENGTH(varcharcol)
FROM t2 ;
GO
DROP TABLE t1
DROP TABLE t2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3992 次 |
| 最近记录: |