我在MSSQL数据库中的表JobData中有一个名为“ Supervisor”的表名。在此“主管”列中,记录的格式为“ SPARKSL”,“ ADITYAG”,“ KENTONS”,“ DRISCOLLJ”等等。我想将这些记录转换为小写字母,并将最后一个字母转换为第一个字母。例如,“ SPARKSL”应更改为“ lsparks”,“ gaditya”,“ skentons”等格式,并且应将此格式应用于所有剩余的记录。
答案 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;
如果您实际上想更新您的主管专栏,那么您也可以使用上述CTE:
UPDATE cte
SET Supervisor = new_sup;
答案 3 :(得分:0)
您需要使用LOWER
,RIGHT
,SUBSTRING
和LEN
命令。即;
UPDATE [Supervisor] SET [Supervisor] = LOWER(RIGHT([Supervisor], 1) + SUBSTRING([Supervisor],1, (LEN([Supervisor])-1)))