我有一个独特的问题。我在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
就像我说的那样,当我使用英语时,查询工作正常。例如,“ John Smith”返回:
10 John Smith htimS nhoJ John Smith
我整天都在搜索此网站和其他网站!预先感谢。
答案 0 :(得分: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个零件名称的假设。