Sql server MS SQL在同一个表中拆分值

Sql server MS SQL在同一个表中拆分值,sql-server,sql-server-2008,Sql Server,Sql Server 2008,你好 我有: TableX Column1 John Smith 007 Tera Name 111 Bob Eva 554 我需要 TableX Column1 Column2 John Smith 007 007 Tera Name 111 111 Bob Eva 554 554

你好

我有:

TableX
Column1
John Smith 007
Tera Name 111
Bob Eva 554
我需要

TableX
Column1                              Column2
John Smith 007                         007
Tera Name 111                          111
Bob Eva 554                            554
我创建了代码,但没有工作。我认为必须有连接才能识别列

ALTER TABLE [dbo].[TableX]
ADD Column2 varchar (50); 

UPDATE [dbo].[TableX] SET
    Column1=Column2
WHERE select SUBSTRING([Column1], PATINDEX('%[0-9]%', [Column1]
), LEN([column1]))

感谢您的帮助

如果您要提取的号码总是在末尾,那么您可以使用:

PATINDEX('%[^0-9]%', REVERSE(Column1))
RIGHT(Column1, PATINDEX('%[^0-9]%', REVERSE(Column1)) - 1)
从末尾开始获取非数字的第一个字符的索引

因此,要提取您可以使用的数字:

PATINDEX('%[^0-9]%', REVERSE(Column1))
RIGHT(Column1, PATINDEX('%[^0-9]%', REVERSE(Column1)) - 1)
因此,更新将如下所示:

UPDATE [dbo].[TableX] 
SET Column2 = RIGHT(Column1, PATINDEX('%[^0-9]%', REVERSE(Column1)) - 1)

假设所需零件长度=3

UPDATE [dbo].[TableX] SET
column2 = RTRIM(right(column1, CHARINDEX('/', column1) +3))

感谢您提供这段代码片段,它可能会提供一些即时帮助。一个恰当的解释将通过说明为什么这是一个很好的解决问题的方法来体现它的教育价值,并将使它对未来有类似但不完全相同问题的读者更有用。请编辑您的答案以添加解释,并说明适用的限制和假设。