我有这样的表
Column1
-------------------------------------------------------
nn=APPLE IPod 44454,o=0006,o=TOP8,nn=USA,nn=TOP8+
nn=SAMSUNG G5 487894,o=04786,o=T418,nn=JPN,nn=TO478+
我需要更新该表并获得这样的结果
Column1 Column2
---------------------------------------------------------------
nn=APPLE IPod 44454,o=0006,o=TOP8,nn=USA,nn=TOP8+ 44454
nn=SAMSUNG G5 487894,o=04786,o=T418,nn=JPN,nn=TO478+ 487894
我的想法是,但我不能适应第一个角色:
update tablename
set [column2] = SUBSTRING(column1, 1, CHARINDEX(' ', column1) - 1 (column1, CHARINDEX(' ', column1) + 1, LEN(column1))
答案 0 :(得分:0)
好的,给定第二个样本记录,看起来你需要的是逗号分隔字符串第一个位置中以空格分隔的字符串的最后一个元素。写自己(或找到)一个接受字符串和分隔符的字符串拆分函数,然后你的解析逻辑是:
这有意义吗?
答案 1 :(得分:0)
以下答案仅基于您实际向我们展示的两条记录。如果我们要从中推导出一条规则,那么我们可能希望提取紧接在字符串中第一个逗号之前的前一个单词(产品编号)。如果是这样,那么我们可以尝试以下逻辑:
nn=APPLE Ipod 44454
)45444 dopI ELPPA=nn
)45444
)44454
)考虑以下查询,通过CTE导入数据:
WITH yourTable AS (
SELECT 'nn=APPLE IPod 44454,o=0006,o=TOP8,nn=USA,nn=TOP8+' AS column1 UNION ALL
SELECT 'nn=SAMSUNG G5 487894,o=04786,o=T418,nn=JPN,nn=TO478+'
),
update_cte AS (
SELECT
column1,
column2,
REVERSE(
SUBSTRING(REVERSE(SUBSTRING(column1, 1, CHARINDEX(',', column1)-1)),
1,
CHARINDEX(' ', REVERSE(SUBSTRING(column1, 1, CHARINDEX(',', column1)-1))) - 1)
) AS col2
FROM yourTable
)
SELECT column1, col2 FROM update_cte;
<强>输出:强>
在这里演示:
如果您想更新您的表格以引入这些column2
产品ID,那么您可以非常轻松地使用上述CTE:
UPDATE update_cte
SET column2 = col2;
答案 2 :(得分:0)
此查询可以为您提供帮助。
UPDATE tablename SET [column2] =
SUBSTRING((LEFT(column1,CHARINDEX(',',column1)-1)), CHARINDEX(' ', column1, CHARINDEX(' ',column1) +1 ) +1 ,LEN(column1))