SQL语句含义

时间:2018-01-25 18:07:25

标签: sql

有人能告诉我这个SQL语句在做什么吗?分解声明的每个部分正在做什么。

convert(char(11),(field name 1 + right('0' + cast(field name 2 as varchar(2),2))

1 个答案:

答案 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个字符的字符类型字符串值。