假设我的表看起来像这样
[ name, number, firstname]
[foo:bar, 123, ]
[bar:foo, 456, ]
我想将名称字段拆分为':',并将第一部分用作'firstname'列。此外,我希望这是永久性的,而不仅仅是结果集。我该怎么办?
我正在使用SQL Server 2008。
我知道之前已经问过这个问题的变体,但它们似乎都只是处理选择数据,我的意思是更新它。
答案 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])))
)