将值的一部分从一列交换到另一列?

时间:2012-02-16 17:13:36

标签: sql sql-server-2005

我对SQL命令非常陌生,请跟我一起讨论。

我有一张桌子:

  

dbo.Product

两栏:

SKU      Name
---      ----
100A-B   (F102397) 1 AFFF C-103

我想将SKU(100A-B)与JUST PART of Name(F102397)交换,而SKU栏中没有括号。

所以它会像:

SKU      Name
---      ----
F102397  (100A-B) 1 AFFF C-103

仅仅是FYI,“名称”列并不总是一致的。这意味着它并不总是像“1 AFFF C-103”。有时它可能是“1AFFFC-103”或“1AFFF C-103”等......但具有不同的值。当有空格/没有空格时,你需要担心下半场吗?

无论如何这样做?任何帮助将不胜感激。 :) 我正在使用SQL-Server 2005。

** 编辑 **

更多示例以及我想从中获得的内容。

大多数数据的示例。它与一些SKU中的空间混乱,但这是我无法改变的选择。

我将()保留在“名称”字段中。

SKU      Name
---      ----
100A-B   (F102397) 1 AFFF C-103
101 A-F  (F011889) TEST ITEM
101 U-X  (F060796) TEST ITEM 2
102A-B   (F102497) TEST ITEM 3

RESULT

SKU      Name
---      ----
F102397  (100A-B) 1 AFFF C-103
F011889  (101 A-F) TEST ITEM
F060796  (101 U-X) TEST ITEM 2
F102497  (102A-B) TEST ITEM 3

1 个答案:

答案 0 :(得分:2)

您应该查看可用的string functions。通常可以用这些来烹饪。

update dbo.Product 
set SKU = substring(Name, 2, charindex( ')', Name)-2),
    Name = stuff(Name, 2, charindex( ')', Name)-2, SKU)

这假设在“名称”字段的开头始终有(。名称字段中的某处始终会有)。 Name或SKU都不包含空值 如果不是这种情况,您必须在问题中指定您想要的结果。

如果您只需要查询数据而不是更新,请使用选择语句。

select substring(Name, 2, charindex( ')', Name)-2),
       stuff(Name, 2, charindex( ')', Name)-2, SKU)
from YourTableName