Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将值的一部分从一列交换到另一列?_Sql_Sql Server 2005 - Fatal编程技术网

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

Sql 将值的一部分从一列交换到另一列?,sql,sql-server-2005,Sql,Sql Server 2005,我有一张桌子: dbo.产品 两列: SKU Name --- ---- 100A-B (F102397) 1 AFFF C-103 我想将SKU(100A-B)与名称的一部分(F102397)交换,而不使用SKU列中的括号 因此,这就像: SKU Name --- ---- F102397 (100A-B) 1 AFFF C-103 仅供参考,“名称”列并不总是一致的。这意味着它不会总是像“1 AFFF C-103”。有时可能是“1AFFFC-

我有一张桌子:

dbo.产品

两列:

SKU      Name
---      ----
100A-B   (F102397) 1 AFFF C-103
我想将SKU(100A-B)与名称的一部分(F102397)交换,而不使用SKU列中的括号

因此,这就像:

SKU      Name
---      ----
F102397  (100A-B) 1 AFFF C-103
仅供参考,“名称”列并不总是一致的。这意味着它不会总是像“1 AFFF C-103”。有时可能是“1AFFFC-103”或“1AFFF C-103”等,但值不同。当有空位/没有空位时,您是否需要担心下半场

不管怎样,这样做有什么好处?任何帮助都将不胜感激。:) 我正在使用SQLServer2005

**编辑**

更多的例子和我想从中得到的东西

大多数数据的外观示例。这是一个混乱的空间,在一些SKU的,但这是我没有选择改变

我将()保存在“Name”字段中

结果

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

你应该看看可用的。通常可以用这些东西来编造一些东西

update dbo.Product 
set SKU = substring(Name, 2, charindex( ')', Name)-2),
    Name = stuff(Name, 2, charindex( ')', Name)-2, SKU)
这假设在名称字段的开头总是有一个
)。名称或SKU均不包含空值。
如果不是这样,你必须在你的问题中指定你想要的结果

如果只需要查询数据而不需要更新,请使用select语句

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

要提取/交换的部分始终位于括号中?这似乎是正则表达式在SQL Server中有用的另一个原因。这完全可以通过
PATINDEX
SUBSTRING
REPLACE
实现;这不会很难,但会很难看。在我们提供例子之前,也许你可以提供更多关于你需要完成什么的细节,以防有更好的方法去做。我同意其他的评论。。。请提供其他示例,以便我们了解范围。此外,如果任一列都可以为空,或者可能不包含括号,或者使用任何其他条件来标识子字符串,请包含这些示例,并解释在这些情况下应执行的操作。很容易解决规则,然后出现所有异常,这对每个人来说都是更多的工作…编辑了我的原始帖子。在这里获取解析字符串的代码,但创建新列以单独存储部分,并一次性修复这个糟糕的设计。如果旧代码需要使用这些新列,请使用计算列将它们重新连接在一起。每当您试图在一个列中组合多个数据段时,您需要求助于疯狂的拆分和解析逻辑,这使得简单的查询速度慢且难以编写。真正的解决方案是将每个数据段存储在自己的列中,并在需要显示它们时根据需要将它们连接起来。@jwahr在这里尝试一下:@Mickeleriksson-非常感谢,这对我需要使用它的地方有很大帮助。现在,我的下一个问题是,这听起来可能对其他人来说都很明显,但是我如何在我的表(备份/测试表)(300多种产品)中查找数据,并应用您刚才所做但实际上没有更新表的内容呢?刚刚看到结果?@jwahr-更新了答案,添加了
select
语句。@Mickeleriksson-再次感谢您的帮助。在你发布你的编辑之前,我算过了:)如果我能投票支持你的答案,我会的,但我不能,或者我会给你一些机会,因为我是这个网站的新手。@jwahr你很好。您可以使用勾号接受答案。但你可能应该等一等,看看其他人是否有更好的解决方案。
select substring(Name, 2, charindex( ')', Name)-2),
       stuff(Name, 2, charindex( ')', Name)-2, SKU)
from YourTableName