[英]SQL Server select part of string
我有这样的桌子
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))
好的,给定第二个示例记录,看起来您需要的是逗号分隔字符串的第一个位置中空格分隔的字符串的最后一个元素。 因此,编写您自己(或找到一个)接受字符串和定界符的字符串分隔符函数,然后您的解析逻辑为:
那有意义吗?
以下答案仅基于您实际显示给我们的两条记录。 如果要从中得出规则,则可能是我们要提取紧接在字符串中第一个逗号之前的前一个单词(产品编号)。 如果是这样,那么我们可以尝试以下逻辑:
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;
该查询可以为您提供帮助。
UPDATE tablename SET [column2] =
SUBSTRING((LEFT(column1,CHARINDEX(',',column1)-1)), CHARINDEX(' ', column1, CHARINDEX(' ',column1) +1 ) +1 ,LEN(column1))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.