Sql server 2005 T-SQL字符串函数:使用左/右和子字符串与奇怪行为之间的区别
我正在使用SQLServer2008和2005(Express)。我试图从varchar字段中提取字母数字字符串的一部分Sql server 2005 T-SQL字符串函数:使用左/右和子字符串与奇怪行为之间的区别,sql-server-2005,tsql,sql-server-2008,Sql Server 2005,Tsql,Sql Server 2008,我正在使用SQLServer2008和2005(Express)。我试图从varchar字段中提取字母数字字符串的一部分 RIGHT(str\u字段,3)生成空值,但子字符串(str\u字段,LEN(str\u字段)-2,LEN(str\u字段))给出正确的值左侧(str_字段,7)给出预期值。有什么好处 我本以为RIGHT(str_字段,3)和子字符串(str_字段,LEN(str_字段)-2,LEN(str_字段))是等价的表达式。有尾随空格 DECLARE @foo varchar(100
RIGHT(str\u字段,3)
生成空值,但子字符串(str\u字段,LEN(str\u字段)-2,LEN(str\u字段))
给出正确的值<代码>左侧(str_字段,7)给出预期值。有什么好处
我本以为
RIGHT(str_字段,3)
和子字符串(str_字段,LEN(str_字段)-2,LEN(str_字段))
是等价的表达式。有尾随空格
DECLARE @foo varchar(100)
SET @foo = 'abc12345def ' --3 spaces
--right or substring
SELECT RIGHT(@foo, 3)
SELECT SUBSTRING(@foo, LEN(@foo)-2, LEN(@foo))
--demonstrate you get spaces
SELECT REPLACE(RIGHT(@foo, 3), ' ', 'z') --single space
--length differences
SELECT LEN(@foo), DATALENGTH(@foo)
--solution
SELECT RIGHT(RTRIM(@foo), 3)
--or trim your column values before storing
RIGHT将产生空格,但LEN忽略尾随空格
DECLARE @foo varchar(100)
SET @foo = 'abc12345def ' --3 spaces
--right or substring
SELECT RIGHT(@foo, 3)
SELECT SUBSTRING(@foo, LEN(@foo)-2, LEN(@foo))
--demonstrate you get spaces
SELECT REPLACE(RIGHT(@foo, 3), ' ', 'z') --single space
--length differences
SELECT LEN(@foo), DATALENGTH(@foo)
--solution
SELECT RIGHT(RTRIM(@foo), 3)
--or trim your column values before storing
看
注意:对于非NULL输入,您不会得到NULL
--only NULL if you send in NULL
SELECT RIGHT(NULL, 3)