反转SQL Server中列的内容

时间:2013-09-25 08:52:04

标签: c# .net sql-server

我最近将访问数据库数据导入客户SQL Server数据库。其中一个名为'Cases'的表格;我将'Case_Name'列设置为'Surname Firstname',其中'Surname'和'Firstname'是Access数据库中的列。现在,客户希望'Case_Name'列成为'Firstname Surname'。所以我的问题是这可以很好地或简单地在T-SQL中完成,或者我是否需要重新运行我的c#迁移程序或者创建一些其他的c#程序

当前格式:

Cases表:

Id         Case_Name         Case_Description
1          Bloggs Joe        Will Management
2          York Susan        Divorce CAse

希望表格如下所示:

Id         Case_Name         Case_Description
1          Joe Bloggs        Will Management
2          Susan York        Divorce CAse

3 个答案:

答案 0 :(得分:2)

安全选项是再次运行迁移程序。

这可以避免人们有多个姓氏或多个名字或两者兼而有之的问题。

更好的解决方案是为姓氏和名字分别设置列。

答案 1 :(得分:2)

变体#1

DECLARE @temp TABLE
(
      ID INT IDENTITY(1,1)
    , Case_Name NVARCHAR(50)
    , Case_Description NVARCHAR(50)
)

INSERT INTO @temp (Case_Name, Case_Description)
VALUES 
    ('Bloggs Joe', 'Will Management'),
    ('York Susan', 'Divorce CAse')

UPDATE @temp
SET Case_Name = SUBSTRING(Case_Name, CHARINDEX(' ', Case_Name), LEN(Case_Name)) + ' ' + SUBSTRING(Case_Name, 1, CHARINDEX(' ', Case_Name)) 

SELECT * FROM @temp

变体#2

DECLARE @temp TABLE
(
      ID INT IDENTITY(1,1)
    , Case_Name NVARCHAR(50)
    , Case_Description NVARCHAR(50)
)

INSERT INTO @temp (Case_Name, Case_Description)
VALUES 
    ('Bloggs Joe', 'Will Management'),
    ('York Susan', 'Divorce CAse')

CREATE TABLE dbo.temp
(
      ID INT IDENTITY(1,1) PRIMARY KEY
    , FirstName NVARCHAR(20) NOT NULL
    , LastName NVARCHAR(20) NOT NULL
    , Case_Name AS FirstName + ' ' + LastName
    , Case_Description NVARCHAR(50)
)

INSERT INTO dbo.temp (FirstName, LastName, Case_Description)
SELECT 
      SUBSTRING(Case_Name, CHARINDEX(' ', Case_Name), LEN(Case_Name)) 
    , SUBSTRING(Case_Name, 1, CHARINDEX(' ', Case_Name)) 
    , Case_Description 
FROM @temp

SELECT * FROM dbo.temp

<强>输出

ID          FirstName            LastName             Case_Name                                 Case_Description
----------- -------------------- -------------------- ----------------------------------------- --------------------------------------------------
1            Joe                 Bloggs                Joe Bloggs                               Will Management
2            Susan               York                  Susan York                               Divorce CAse

答案 2 :(得分:1)

SELECT SUBSTRING(casename, 1, CHARINDEX(' ', casename) - 1) AS [FirstName],
SUBSTRING(casename, CHARINDEX(' ', casename) + 1, LEN(casename)) AS [LastName]

那会将2分割成一个空格,然后你可以随意将它们连接在一起。

SELECT FirstName + ' ' + LastName FROM (subquery to get the split as above) as subq

正如其他人提到的,如果他们有多个名字等,那就不行了。此外,将它们存储在前进的单独字段中以使其更容易