SQL QUERY使用SQL Server将字符串中的最后一个字母带到第一个字母的位置

时间:2019-05-03 13:49:36

标签: sql sql-server

我在SQL Server数据库的表Supervisor中有一个名为JobData的列。在此Supervisor列中,记录的格式如下。

DANNYL
ADITYAG
SAMMYS
BOBBYJ

我想将这些记录转换为小写并将最后一个字母转换为第一个字母。例如,DANNYL应更改为格式ldanny,并且此格式应应用于所有其余记录。

有人可以通过SQL查询帮助我吗?

4 个答案:

答案 0 :(得分:3)

您可以使用以下解决方案,分别使用LEFTRIGHT来获取名称的各个部分。通过使用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

demo on dbfiddle.uk

答案 1 :(得分:1)

可能有更好的方法,但这是我的主张。

SELECT lower(left(right('DANYL',1)+'DANYL',len('DANYL')))

答案 2 :(得分:1)

使用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

答案 3 :(得分:0)

喜欢吗? :

SELECT
LOWER(CONCAT(SUBSTRING([Supervisor], LEN([Supervisor]), 1),SUBSTRING([Supervisor], 1, ABS(LEN([Supervisor])-1))))
FROM TABLE