反转 SQL Server 中列的内容
本文关键字:SQL Server 反转 | 更新日期: 2023-09-27 18:32:47
我最近将访问数据库数据导入到客户的SQL Server数据库中。对于名为"案例"的表之一;我将"Case_Name"列设置为"姓氏名字",其中"姓氏"和"名字"是 Access 数据库中的列。现在,客户希望"Case_Name"列改为"名字姓氏"。所以我的问题是这是否可以在 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
变体 #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
安全的选项是再次运行迁移程序。
这避免了人们有多个姓氏或多个名字或两者兼而有之的问题。
更好的解决方案是为姓氏和名字设置单独的列。
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
正如其他人提到的,如果他们有多个名字等,那就行不通了。此外,将它们存储在单独的字段中,以使其更容易