SQL Server将泰语全名解析为倒数第一



我有一个独特的问题。我在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

就像我说的,当我使用英语时,这个查询很好用。例如,"John Smith"返回:

10  John Smith  htimS nhoJ  John    Smith

我已经搜索了这个和其他网站一整天!提前谢谢。

我以前见过这种(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'开头(。还有一句警告——名字很复杂。验证你关于总是有两个零件名称的假设。

最新更新