【问题标题】:How to update a column in a table with a concat of two other column from the same row for each row?如何更新表中的列,每行的同一行中的另外两列的连接?
【发布时间】:2019-01-17 03:51:08
【问题描述】:

只是想弄清楚如何编写一个 T-SQL 查询,该查询允许我使用来自其他两列的两个值的 concat 更新列值(称为 range),按顺序为表中的每一行。

我尝试了以下方法,但它所做的只是获取表中的顶行值,并使用相同的值更新“每个”单列,而不管范围如何。

UPDATE dbo.levels
SET level_1_range = CONCAT(min_level_1, '-', max_Level_1)

我希望它看起来像这样:

date     | min_level_1 | max_level_1 | level_1_range
---------+-------------+-------------+---------------    
01/01/18 |      1      |     10      | 1-10
02/02/18 |     20      |     25      | 20-25

但我的代码返回更像

date     | min_level_1 | max_level_1 | level_1_range
---------+-------------+-------------+--------------
01/01/18 |     1       |     10      | 1-10
02/02/18 |    20       |     25      | 1-10

【问题讨论】:

  • 您的查询与预期结果完全不符。您在查询中有level_1_range,但在预期结果中没有。请同时显示样本数据
  • 编辑了主要内容以匹配 - 我在这里没有使用真实值。

标签: sql sql-server


【解决方案1】:

在这里看不到不使用计算字段的原因。

Alter Table dbo.levels Add level_1_range_computed As CONCAT(min_level_1, '-', 
max_Level_1) PERSISTED; 

来自 msdn:

计算列是一个虚拟列,它没有物理存储在表中,除非该列被标记为 PERSISTED。计算列表达式可以使用来自其他列的数据来计算其所属列的值。您可以在 SQL Server 中为计算列指定表达式

【讨论】:

    【解决方案2】:

    只要它们都是字符串,一个简单的 + 就可以在 SQL Server 中使用。所以一些简单的事情

    convert(varchar,min_level_1)+'-'+convert(varchar,max_Level_1)
    

    会做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 2023-03-06
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多