sql查询将字符串中的最后一个字母移到首个字母位置

时间:2018-09-11 13:50:09

标签: sql sql-server tsql

我在MSSQL数据库中的表JobData中有一个名为“ Supervisor”的表名。在此“主管”列中,记录的格式为“ SPARKSL”,“ ADITYAG”,“ KENTONS”,“ DRISCOLLJ”等等。我想将这些记录转换为小写字母,并将最后一个字母转换为第一个字母。例如,“ SPARKSL”应更改为“ lsparks”,“ gaditya”,“ skentons”等格式,并且应将此格式应用于所有剩余的记录。

4 个答案:

答案 0 :(得分:1)

这应该有效:

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

答案 1 :(得分:1)

只是从蒂姆的答案中总结出来(所有三个答案看起来都不错)...

是-您将收到一个错误,因为您将其传递为空白或空格(仅一个或多个空格)是因为LEN(' ') = 0。 0-1 = -1。 LEFT(<something>,-1)无效。要解决此问题,您可以将new_sup的Tim逻辑更改如下:

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; 

答案 2 :(得分:0)

尝试此选项:

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

Demo

如果您实际上想更新您的主管专栏,那么您也可以使用上述CTE:

UPDATE cte
SET Supervisor = new_sup;

答案 3 :(得分:0)

您需要使用LOWERRIGHTSUBSTRINGLEN命令。即;

 UPDATE [Supervisor] SET [Supervisor] = LOWER(RIGHT([Supervisor], 1) + SUBSTRING([Supervisor],1, (LEN([Supervisor])-1)))