SQL服务器解析泰语全名名姓(SQL Server Parsing Thai Language Fu

2019-10-29 06:07发布

我有一个独特的问题。 我已经工作了很长一段时间与SQL Server。 我们将文件导入到SQL Server中包含全名。 所有我需要做的是分析的全名到第一个和最后。 如果该名称是英文字符集,我的解析工作正常。 但是,我们分析它使用不同的字符集泰的名字呢?

这是我的代码:

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

一整天我已搜查这个和其他网站! 提前致谢。

Answer 1:

我见过涉及扭转和以前的东西,不明白使用反向的目的,这(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点部分的名称你的假设。



文章来源: SQL Server Parsing Thai Language Full Name to First Last