SQL Server разбирает полное имя тайского языка на первый последний - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть уникальная проблема. Я долгое время работал с 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

Я искал этот и другие сайты весь день! Заранее спасибо.

1 Ответ

0 голосов
/ 10 ноября 2018

Ранее я видел эту сложную логику (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 частей.

...