SQL-запрос для перевода последней буквы в строке в первую букву - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть имя таблицы Supervisor из таблицы JobData в базе данных MSSQL.В этом столбце «Супервизор» записи имеют формат «SPARKSL», «ADITYAG», «KENTONS», «DRISCOLLJ» и так далее.Я хочу преобразовать эти записи в нижний регистр и перевести последнюю букву в первую букву. Например, «SPARKSL» следует изменить на формат «lsparks», «gaditya», «skentons» и т. Д., И этот формат должен быть применен квсе оставшиеся записи.

Ответы [ 4 ]

0 голосов
/ 11 сентября 2018

Просто строю из ответов Тима (все три ответа выглядят отлично) ...

Да - вы получите ошибку, если передадите ей пробел или пробел (только один или несколько пробелов), потому что LEN(' ') = 0. 0-1 = -1. LEFT(<something>,-1) недействительно. Чтобы исправить это, вы должны изменить логику Тима на new_sup, чтобы она выглядела так:

ISNULL(LOWER(LEFT(Supervisor, NULLIF(LEN(Supervisor),0) - 1)),'') AS new_sup

Полное обновленное решение будет выглядеть так:

DECLARE @yourtable TABLE (Supervisor VARCHAR(100));
INSERT @yourtable(Supervisor)
VALUES ('SPARKSL'),('ADITYAG'),('KENTONS'),('DRISCOLLJ'),(' '),('');

WITH cte AS (
    SELECT *,
        LOWER(RIGHT(Supervisor, 1)) +
        ISNULL(LOWER(LEFT(Supervisor, NULLIF(LEN(Supervisor),0) - 1)),'') AS new_sup
    FROM @yourTable
)
SELECT *
FROM cte; 
0 голосов
/ 11 сентября 2018

Это должно работать:

WITH Demo AS
(
  SELECT X FROM (VALUES ('SPARKSL'),('ADITYAG'),('KENTONS')) T(X)
)
SELECT *, LOWER(SUBSTRING(X, LEN(X),1)+SUBSTRING(X,1,LEN(X)-1))
FROM Demo
0 голосов
/ 11 сентября 2018

Вам необходимо использовать команды LOWER, RIGHT, SUBSTRING И LEN.т.е.;

 UPDATE [Supervisor] SET [Supervisor] = LOWER(RIGHT([Supervisor], 1) + SUBSTRING([Supervisor],1, (LEN([Supervisor])-1)))
0 голосов
/ 11 сентября 2018

Попробуйте эту опцию:

WITH cte AS (
    SELECT *,
        LOWER(RIGHT(Supervisor, 1)) +
        LOWER(LEFT(Supervisor, LEN(Supervisor) - 1)) AS new_sup
    FROM yourTable
)

SELECT *
FROM cte;

enter image description here

Демо

Если вы вместо этого хотите на самом деле обновить свой столбец супервизора, то вы также можете использовать вышеуказанный CTE:

UPDATE cte
SET Supervisor = new_sup;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...