繁体   English   中英

SQL Server选择字符串的一部分

[英]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))

好的,给定第二个示例记录,看起来您需要的是逗号分隔字符串的第一个位置中空格分隔的字符串的最后一个元素。 因此,编写您自己(或找到一个)接受字符串和定界符的字符串分隔符函数,然后您的解析逻辑为:

  1. 以逗号分隔字段
  2. 采取第一个要素
  3. 在空格处分割该元素
  4. 拿最后一个元素

那有意义吗?

以下答案仅基于您实际显示给我们的两条记录。 如果要从中得出规则,则可能是我们要提取紧接在字符串中第一个逗号之前的前一个单词(产品编号)。 如果是这样,那么我们可以尝试以下逻辑:

  • 在逗号前隔离子字符串(例如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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM