0

我有一个独特的问题。我已经使用 SQL Server 工作了很长时间。我们将包含全名的文件导入 SQL Server。我需要做的就是将全名解析为 First 和 Last。如果名称是英文字符集,我的解析工作正常。但是,我们正在解析使用不同字符集的泰语名称?

这是我的代码:

DECLARE @FullName NVARCHAR(MAX) = N'กล้วยไม้ สวามิวัศดุ์'


SELECT 
    LEN(@FullName) AS StringLength,
    @FullName AS FullName,
    REVERSE(@FullName) AS ReverseName,
    LEFT(@FullName, LEN(@FullName) - CHARINDEX(' ', REVERSE(@FullName))) AS FirstName,
    STUFF(RIGHT(@FullName, CHARINDEX(' ', REVERSE(@FullName))),1,1,'') AS LastName;

结果:

20  กล้วยไม้ สวามิวัศดุ์    ์ุดศัวิมาวส ้มไยว้ลก    กล้วยไม้ สวามิวัศดุ์     NULL

就像我说的,当我使用英语时,查询工作正常。例如,“约翰史密斯”返回:

10  John Smith  htimS nhoJ  John    Smith

我整天都在搜索这个网站和其他网站!提前致谢。

4

1 回答 1

0

我以前见过这个(IMO)复杂的逻辑,涉及反向和东西,不明白使用反向的目的。这对我来说似乎过于复杂。下面在不使用反向的情况下执行您想要的操作。

set nocount on;
declare @names table (FullName nvarchar(40) not null); 
insert @names (FullName) values (N'กล้วยไม้ สวามิวัศดุ์'), (N'John Smith'), (N'Bozo Clown'), (N'Eva Perón'), (N'Stefan Löfven');

select * from @names;


select  
    LEN(FullName) AS StringLength,
    FullName AS FullName,
    LEFT(FullName, CHARINDEX(N' ', FullName)) AS FirstName,
    RIGHT(FullName, len(FullName) - CHARINDEX(N' ', FullName) + 1) as LastName,
    STUFF(FullName, 1, CHARINDEX(N' ', FullName), N'') as LName  
from  @names
;

为了保持一致性(您应该养成的习惯),我已将您的字符串文字从 ansi 字符串更改为 unicode 字符串(以 N' 开头)。还有一句警告——名字很复杂。验证您关于始终具有 2 个部件名称的假设。

于 2018-11-10T00:32:21.133 回答