【问题标题】:SQL Statement MeaningSQL 语句含义
【发布时间】:2023-03-28 09:19:01
【问题描述】:

谁能告诉我这条 SQL 语句在做什么?分解语句的每个部分在做什么。

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

【问题讨论】:

  • 当然,您可以在没有我们帮助的情况下查找有关这些功能的文档?
  • 真的吗?这里w3schools.com/sql/sql_ref_sqlserver.asp找到功能点击它并阅读它的作用。
  • @Markov:除了可能不是那个网站。而是他实际使用的数据库的官方文档。
  • 据我所知,由于cast(),此语句正在生成语法错误。

标签: sql


【解决方案1】:
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)之前的第一部分是调用字符串right2是从中选择的字符数,从末尾开始。

因此,如果您将以下值输入正确

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

【讨论】:

  • 非常感谢,这正是我所需要的。非常感谢您的帮助。
  • 当某个答案对您有所帮助或有用时,您可以投票(向上箭头)以表明它很有用。如果它是您正在寻找的东西或已经解决了您的特定问题,您可以接受它(upvote/downvote 箭头下的复选标记)。如果答案质量低下、离题、对您的问题没有用处,您可以投反对票。
猜你喜欢
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
相关资源
最近更新 更多