用于将数据从一列映射到另一列的SQL命令

时间:2016-07-19 11:31:00

标签: sql sql-server sql-server-2008

假设我的表看起来像这样

[   name, number, firstname]    
[foo:bar,    123,          ]
[bar:foo,    456,          ]

我想将名称字段拆分为':',并将第一部分用作'firstname'列。此外,我希望这是永久性的,而不仅仅是结果集。我该怎么办?

我正在使用SQL Server 2008。

我知道之前已经问过这个问题的变体,但它们似乎都只是处理选择数据,我的意思是更新它。

3 个答案:

答案 0 :(得分:2)

您可以创建一个执行此操作的视图,然后使用该视图进行将来的选择。

CREATE VIEW split name AS
SELECT 
SUBSTRING(name, 1, CHARINDEX(':',  name, 1) - 1) as firstname, 
RTRIM(SUBSTRING(name,  CHARINDEX(':',  name, 1)+1,100)) as surname, number
FROM myTable

或者,

UPDATE myTable
SET firstname = SUBSTRING(name, 1, CHARINDEX(':',  name, 1) - 1) 
FROM myTable

答案 1 :(得分:1)

select substring(name, 1, Charindex(':', name) - 1) as first_name,
    substring(name, Charindex(':', name) + 1, LEN(name)) as  last_name,
    number
from my_table

答案 2 :(得分:1)

您可以通过为firstname设置计算列来实现此目的 - 这意味着您不需要实际保留名字,但您可以将其视为任何其他列。

CREATE TABLE [dbo].[MyTable](
    [name] [nvarchar](255) NOT NULL,
    [firstname]  AS (substring([name],(0),charindex(':',[name])))
)