SQL Server中的字符串拆分

SQL Server中的字符串拆分,sql,sql-server,Sql,Sql Server,你能帮我完成这项任务吗。我有一个表,有两列ID,String。该列中的字符串以分隔。我需要生成列剪切这应该是关键。将字符串拆分为行,然后选择不同的值。如果您还需要字符串列,只需在id上加入您的表即可 这应该是关键。将字符串拆分为行,然后选择不同的值。如果您还需要字符串列,只需在id上加入您的表即可 还有一种方法: CREATE TABLE MyStrings ( ID INT, String VARCHAR (25) ); INSERT INTO MyStrings VA

你能帮我完成这项任务吗。我有一个表,有两列ID,String。该列中的字符串以分隔。我需要生成列剪切

这应该是关键。将字符串拆分为行,然后选择不同的值。如果您还需要字符串列,只需在id上加入您的表即可


这应该是关键。将字符串拆分为行,然后选择不同的值。如果您还需要字符串列,只需在id上加入您的表即可

还有一种方法:

CREATE TABLE MyStrings (
    ID INT,
    String VARCHAR (25)
    );
INSERT INTO MyStrings VALUES
(1, 'A#B#C'),
(1, 'A#B#C'),
(1, 'A#B#C'),
(2, 'K#L#X#W#I'),
(2, 'K#L#X#W#I'),
(2, 'K#L#X#W#I'),
(2, 'K#L#X#W#I'),
(2, 'K#L#X#W#I'),
(3, 'G');

WITH CTE AS(
SELECT *,
        ROW_NUMBER () OVER (PARTITION BY ID ORDER BY ID) AS RN
FROM MyStrings
    )
    SELECT ID, String,
            SUBSTRING(String, IIF(RN = 1 , RN, RN + (RN-1)) 
                      , 1) AS Cut
    FROM CTE;

结果:

+----+-----------+-----+
| ID |  String   | Cut |
+----+-----------+-----+
|  1 | A#B#C     | A   |
|  1 | A#B#C     | B   |
|  1 | A#B#C     | C   |
|  2 | K#L#X#W#I | K   |
|  2 | K#L#X#W#I | L   |
|  2 | K#L#X#W#I | X   |
|  2 | K#L#X#W#I | W   |
|  2 | K#L#X#W#I | I   |
|  3 | G         | G   |
+----+-----------+-----+
还有一种方法:

CREATE TABLE MyStrings (
    ID INT,
    String VARCHAR (25)
    );
INSERT INTO MyStrings VALUES
(1, 'A#B#C'),
(1, 'A#B#C'),
(1, 'A#B#C'),
(2, 'K#L#X#W#I'),
(2, 'K#L#X#W#I'),
(2, 'K#L#X#W#I'),
(2, 'K#L#X#W#I'),
(2, 'K#L#X#W#I'),
(3, 'G');

WITH CTE AS(
SELECT *,
        ROW_NUMBER () OVER (PARTITION BY ID ORDER BY ID) AS RN
FROM MyStrings
    )
    SELECT ID, String,
            SUBSTRING(String, IIF(RN = 1 , RN, RN + (RN-1)) 
                      , 1) AS Cut
    FROM CTE;

结果:

+----+-----------+-----+
| ID |  String   | Cut |
+----+-----------+-----+
|  1 | A#B#C     | A   |
|  1 | A#B#C     | B   |
|  1 | A#B#C     | C   |
|  2 | K#L#X#W#I | K   |
|  2 | K#L#X#W#I | L   |
|  2 | K#L#X#W#I | X   |
|  2 | K#L#X#W#I | W   |
|  2 | K#L#X#W#I | I   |
|  3 | G         | G   |
+----+-----------+-----+

基于什么请?多次询问和回答。但实际上,为什么要这样存储数据?SQL具有用于保存多个值的数据类型。字符串不是其中之一。如果您使用一个设计用于保存多个值的类型,您会发现还提供了提取单个值的机制。我试图在Excel中剪切它,Access,但没有结果,所以我切换到SQL Server,但遇到了第二个字符-前两个字母我可以拆分。基于什么请?多次询问和回答。但实际上,为什么要这样存储数据?SQL具有用于保存多个值的数据类型。字符串不是其中之一。如果您使用一个设计用于保存多个值的类型,您会发现还提供了提取单个值的机制。我试图在Excel中剪切它,Access,但没有结果,所以我切换到SQL Server,但第二个字符卡住了-前两个字母我可以拆分。谢谢,它也工作了!谢谢,它也起作用了!