在SQL Server 2005中
如果我想找到varchar(max)变量中最右边的一个字符,没问题:
declare @foostr varchar(max)
set @foostr = 'abcd'
select right (@foostr, 1)
----
d
如果我想找到一个字符串文字的最右边的零字符,没问题:
select right ('abcd', 0)
------------------
返回一个空字符串 如果我想找到varchar(10)中最右边的零字符,没问题:
declare @foostr varchar(10)
set @foostr = 'abcd'
select right (@foostr, 0)
----
返回一个空字符串 如果我想找到varchar(max)的最右边的零字符,那么:
declare @foostr varchar(max)
set @foostr = 'abcd'
select right (@foostr, 0)
----
NULL
返回NULL。为什么呢?
答案 0 :(得分:4)
我认为这是一种未定义的行为,如the doc of RIGHT
,
integer_expression
是一个正整数,指定返回character_expression的字符数。如果integer_expression为负数,则返回错误。
如果为0,则不指定返回的内容。
答案 1 :(得分:0)
,1不是,0但是对我来说仍然是''
declare @foostr varchar(max)
set @foostr = 'abcd'
select right (@foostr, 1)
为什么,0 ????什么是最正确的零字符应该是什么意思?
右(character_expression,integer_expression) integer_expression 是正整数,指定将返回character_expression的字符数。如果integer_expression为负数,则返回错误。如果integer_expression的类型为bigint且包含较大的值,则character_expression必须是大数据类型,例如varchar(max)。