Sql 尝试连接2个字符串,结果以大量空格结尾
或 或 输出为:Sql 尝试连接2个字符串,结果以大量空格结尾,sql,sql-server,string,tsql,Sql,Sql Server,String,Tsql,或 或 输出为: 如果没有这些空格,如何获得输出?您使用的是char,而您可能需要[n]varchar(…):前者用空格填充字符串,而后者不: select ltrim(convert(char, 123) + 'sda') 但更简单的是:concat()默认情况下强制将其参数转换为正确的数据类型,因此应该这样做: concat(convert(varchar(10), 123), 'sda'); 您使用的是char,而您可能需要[n]varchar(…):前者在字符串中填充空格,而后者不
如果没有这些空格,如何获得输出?您使用的是
char
,而您可能需要[n]varchar(…)
:前者用空格填充字符串,而后者不:
select ltrim(convert(char, 123) + 'sda')
但更简单的是:concat()
默认情况下强制将其参数转换为正确的数据类型,因此应该这样做:
concat(convert(varchar(10), 123), 'sda');
您使用的是
char
,而您可能需要[n]varchar(…)
:前者在字符串中填充空格,而后者不:
select ltrim(convert(char, 123) + 'sda')
但更简单的是:concat()
默认情况下强制将其参数转换为正确的数据类型,因此应该这样做:
concat(convert(varchar(10), 123), 'sda');
首先,在SQL Server中,永远不要使用没有长度的
char
或相关字符串定义。SQL Server需要一个长度,默认值取决于上下文。如果您依赖于默认长度,那么您的代码就有一个bug正在等待发生
其次,char
几乎从来都不是你想要的。它是一个固定长度的字符串,较短的字符串用空格填充
如果需要显式转换,请使用varchar
,可变长度字符串:
concat(123, 'sda')
或者省去显式转换,使用concat()
:
首先,在SQL Server中,永远不要使用没有长度的
char
或相关字符串定义。SQL Server需要一个长度,默认值取决于上下文。如果您依赖于默认长度,那么您的代码就有一个bug正在等待发生
其次,char
几乎从来都不是你想要的。它是一个固定长度的字符串,较短的字符串用空格填充
如果需要显式转换,请使用varchar
,可变长度字符串:
concat(123, 'sda')
或者省去显式转换,使用concat()
:
这里的问题有两个方面。首先,您正在转换为
字符
,这是一种固定宽度数据类型,其次,您没有定义字符
的长度,因此使用默认长度。对于CAST
和CONVERT
这是char(30)
因此,您需要开始的是convert(char,123)
。这将int123
转换为固定宽度字符串'123'
。然后将varchar(3)
值'sda'
连接到该值,从而得到'123 sda'
。这是工作完全按照书面,但显然不是你想要的
显而易见的解决方法是使用varchar
并定义长度,例如CONCAT(CONVERT(varchar(5),123),'sda')
,它将返回'123sda'
,但是,函数的所有参数都是字符串类型:
字符串值
要连接到其他值的字符串值。CONCAT
函数需要至少两个字符串值参数,且不超过254个字符串值参数
这意味着您只需传递值123
,它将被隐式转换为字符串类型:CONCAT(123,'sda')
重申我的评论链接:这里的问题有两个方面。首先,您正在转换为
字符
,这是一种固定宽度数据类型,其次,您没有定义字符
的长度,因此使用默认长度。对于CAST
和CONVERT
这是char(30)
因此,您需要开始的是convert(char,123)
。这将int123
转换为固定宽度字符串'123'
。然后将varchar(3)
值'sda'
连接到该值,从而得到'123 sda'
。这是工作完全按照书面,但显然不是你想要的
显而易见的解决方法是使用varchar
并定义长度,例如CONCAT(CONVERT(varchar(5),123),'sda')
,它将返回'123sda'
,但是,函数的所有参数都是字符串类型:
字符串值
要连接到其他值的字符串值。CONCAT
函数需要至少两个字符串值参数,且不超过254个字符串值参数
这意味着您只需传递值123
,它将被隐式转换为字符串类型:CONCAT(123,'sda')
重申我的评论链接:其他人已经指出了问题的根本原因,如果您无法编辑数据类型,您可以始终使用
选择CONCAT(TRIM(CONVERT(char,123)),'sda')
。尽管强烈建议使用varchar(n)
或指定char
的独占长度,因为创建固定长度字符串然后使用TRIM
减少长度是毫无意义的varchar(30)
非常适合这里,因为长度仍然不能超过30个符号,但如果字符串较短,则不会使用所有长度。其他人已经指出了问题的根本原因,如果无法编辑数据类型,则始终可以使用选择CONCAT(TRIM(CONVERT(char,123)),'sda')
。尽管强烈建议使用varchar(n)
或指定char
的独占长度,因为创建固定长度字符串然后使用TRIM
减少长度是毫无意义的varchar(30)
非常适合这里,因为长度仍然不能超过30个符号,但如果字符串较短,则不会使用所有长度。让我们参考Microsoft文档:
如果在数据定义或变量声明语句中未指定n,则默认长度为1。如果n不是sp
select concat(123, 'sda')
select convert(varchar, 123) + 'sda'