SQL QUERY для перевода последней буквы в строке в позицию первой буквы с использованием SQL Server - PullRequest
0 голосов
/ 03 мая 2019

У меня есть столбец с именем Supervisor из таблицы JobData в базе данных SQL Server. В этом столбце Supervisor записи имеют следующий формат.

DANNYL
ADITYAG
SAMMYS
BOBBYJ

Я хочу преобразовать эти записи в нижний регистр и перевести последнюю букву в первую. Например, DANNYL следует изменить на формат ldanny, и этот формат должен применяться ко всем оставшимся записям.

Может кто-нибудь помочь мне с SQL-запросом для этого?

Ответы [ 4 ]

3 голосов
/ 03 мая 2019

Вы можете использовать следующее решение, используя LEFT и RIGHT, чтобы получить части имени.Используя LOWER, вы можете преобразовать символы верхнего регистра в нижний регистр:

SELECT LOWER(RIGHT(Supervisor, 1) + LEFT(Supervisor, LEN(Supervisor) - 1)) 
FROM JobData
WHERE LTRIM(RTRIM(Supervisor)) <> ''

-- or using ABS on the length - 1 so the WHERE isn't needed.
SELECT LOWER(RIGHT(Supervisor, 1) + LEFT(Supervisor, ABS(LEN(Supervisor) - 1))) 
FROM JobData

Поскольку столбец Supervisor выглядит так, что он содержит пустые значения, вы также можете использовать следующее решениебез расчета и без ошибок при пустых значениях:

SELECT LOWER(RIGHT(Supervisor, 1) + REVERSE(SUBSTRING(REVERSE(Supervisor), 2, LEN(Supervisor))))
FROM JobData

... и другой возможности с использованием STUFF:

SELECT LOWER(LEFT(STUFF(Supervisor, 1, 0, RIGHT(Supervisor, 1)), LEN(Supervisor)))
FROM JobData

демо на dbfiddle.uk

1 голос
/ 03 мая 2019

Используя SUBSTRING, вы можете получить ожидаемый результат:

SELECT LOWER(CONCAT(SUBSTRING(Supervisor, LEN(Supervisor), 1), SUBSTRING(Supervisor, 0, LEN(Supervisor))))
FROM JobData

Демонстрация с данными образца:

DECLARE @JobData TABLE (Supervisor VARCHAR(100));

INSERT INTO @JobData (Supervisor) VALUES
('DANNYL'), ('ADITYAG'), ('SAMMYS'), ('BOBBYJ');

SELECT LOWER(CONCAT(SUBSTRING(Supervisor, LEN(Supervisor), 1), SUBSTRING(Supervisor, 0, LEN(Supervisor)))) AS Supervisor
FROM @JobData

Выход:

ldanny
gaditya
ssammy
jbobby
1 голос
/ 03 мая 2019

, вероятно, есть лучший способ сделать это, но вот мое предложение.

SELECT lower(left(right('DANYL',1)+'DANYL',len('DANYL')))
0 голосов
/ 03 мая 2019

Как это? :

SELECT
LOWER(CONCAT(SUBSTRING([Supervisor], LEN([Supervisor]), 1),SUBSTRING([Supervisor], 1, ABS(LEN([Supervisor])-1))))
FROM TABLE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...