我有一条选择语句,它将一个人的名字的多个部分组合在一起。这不是什么新鲜事。
SELECT FirstName + ' ' + LastName AS FullName FROM MyTable
然后,我尝试将中间的首字母添加到其中,并提出了以下内容
SELECT FirstName + ' ' + ISNULL(MiddingInitial + ' ', '') + LastName AS FullName FROM MyTable
这似乎可行,但是在对进行测试时ISNULL()
,我遇到了一个奇怪的行为。我知道可以NULL + 'any string'
解决NULL
。但是,这简直是奇怪的...
这是我的代码,以及我得到的结果...
print '''' + isnull(null + 'Any String','Results in null') + ''''
print '''' + isnull(null + 'Any','Results in null') + ''''
print '''' + isnull(null + 'A','Results in null') + ''''
print '''' + isnull(null + '','Results in null') + ''''
/*
'Results in '
'Resu'
'Re'
'Re'
*/
为什么会出现这种现象的任何想法?它对您有用吗?
它取决于您正在使用的数据类型和ISNULL
功能的行为。让我们看一个例子:
null + 'Any String'
上面的内容非常适合varchar(11)
数据类型。的NULL
(这是真的只是结果char(0)
,并且具有长度为1)和连接在一起的规则10个字符的字符串,使对于11个字符总数。替换字符串(ISNULL
函数的第二个参数)将被强制装入varchar(11)
,因此将被截断为11个字符。
其余项目重复该模式,其中空字符串作为特殊情况。
如果您不希望发生这种情况,请使用COALESCE
,它使用数据类型优先级来代替列表中第一项的数据类型。Avarchar(15)
优先于varchar(11)
,因此您将获得完整的替换字符串:
print '''' + coalesce(null + 'Any String','Results in null') + ''''
print '''' + coalesce(null + 'Any','Results in null') + ''''
print '''' + coalesce(null + 'A','Results in null') + ''''
print '''' + coalesce(null + '','Results in null') + ''''
/*
'Results in null'
'Results in null'
'Results in null'
'Results in null'
*/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句