我在SQL Server数据库的表Supervisor
中有一个名为JobData
的列。在此Supervisor
列中,记录的格式如下。
DANNYL
ADITYAG
SAMMYS
BOBBYJ
我想将这些记录转换为小写并将最后一个字母转换为第一个字母。例如,DANNYL
应更改为格式ldanny
,并且此格式应应用于所有其余记录。
有人可以通过SQL查询帮助我吗?
答案 0 :(得分:3)
您可以使用以下解决方案,分别使用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
答案 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