有人能告诉我这个SQL语句在做什么吗?分解声明的每个部分正在做什么。
convert(char(11),(field name 1 + right('0' + cast(field name 2 as varchar(2),2))
答案 0 :(得分:0)
convert(char(11),(field_name_1 + right('0' + cast(field_name_2 as varchar(2),2))
convert()
(文档https://technet.microsoft.com/en-us/library/ms187928(v=sql.105).aspx):
告诉sql server将第二个参数中的值转换为第一个参数中给出的类型。
char(11)
:
告诉sql server命令后面的值需要成为一个字符字段类型,最大长度为11个字符。
(field_name_1 + right('0' + cast(field_name_2 as varchar(2),2)
field_name_1
对应于您正在阅读的表格中的字段。它将获得该字段的值并将其放在那里。
+
表示追加字符串。将+
后面的值附加到+
之前的值
例如
'foo' + 'bar' = 'foobar'
'foo' + 'baz = 'foobaz'
因此,在这种情况下,+
后面的任何内容都应附加field_name_1
right
是一个函数,从字符串末尾开始得到N个字符(文档https://docs.microsoft.com/en-us/sql/t-sql/functions/right-transact-sql)
在这个功能中发生了很多事情。但是逗号'0' + cast(field_name_2 as varchar(2)
之前的第一部分是字符right
被调用,而2
是从结尾开始从中选择的字符数。
因此,如果您将以下值输入正确的
013
03
044
你最终会得到
13
03
44
现在我们有了这个部分:
'0' + cast(field_name_2 as varchar(2)`
'0'
是一个字符串文字。这只是一个长度为1的字符串,其中包含字符0
+
表示追加字符串。将+
后面的值附加到+
之前的值
因此,在这种情况下,+
后面的任何内容都会附加到0
。
例如:
'0' + 'foo' = '0foo'
'0' + '1' = '01'
cast(field_name_2 as varchar(2))
在您的代码中,您实际上错过了结束)
,可能会给您带来一些麻烦。
基本上它的作用是field_name_2
的值,它可能是整数类型(只是猜测)并将其转换为varchar的类型,最大长度为2(猜测数字永远不会超过99)。
因此,值为1
的数字将变为带有值1
字符的字符串,即'1'
。
2 = '2';
33 = '33';
42 = '42';
这与前一部分合并将产生
'0' + '2' = '02';
'0' + '33' = '033';
'0' + '42' = '042';
将被输入right(value, 2);
,这将导致
right('02', 2) = '02';
right('033', 2) = '33';
right('042', 2) = '42';
将附加到field_name_1
'foobar' + '02' = 'foobar02';
然后转换为最多11个字符的字符类型字符串值。