我花了一些时间尝试一起查询,根据2列值创建AD用户名。
您可能知道 - 这些用户名的限制是20个字符。
该查询适用于我当前和过去数据的99% - 但是,仍然有一些名称 - 即使在减少了超过20个字符之后。我的查询如何包含left(),20以最终将整个结果集限制为20个字符或更少?
查询如下:
SELECT CASE
WHEN LEN(replace(replace(replace(replace(PreName + Surname, ',', ''), ' ', ''), '''', ''), '-', '')) > 20
THEN
CASE
WHEN PreName LIKE '%-%' THEN LEFT(replace(replace(replace(replace(PreName, ',', ''), ' ', ''), '''', ''), '-', ''), CHARINDEX('-', (PreName)) - 1)
WHEN PreName LIKE '% %' THEN LEFT(replace(replace(replace(replace(PreName, ',', ''), ' ', ''), '''', ''), '-', ''), CHARINDEX(' ', (PreName)) - 1)
ELSE replace(replace(replace(replace(PreName, ',', ''), ' ', ''), '''', ''), '-', '')
END
+
CASE
WHEN Surname LIKE '%-%' THEN RIGHT(replace(replace(replace(replace(Surname, ',', ''), ' ', ''), '''', ''), '-', ''), CHARINDEX('-', REVERSE(Surname)) - 1)
WHEN Surname LIKE '% %' THEN RIGHT(replace(replace(replace(replace(Surname, ',', ''), ' ', ''), '''', ''), '-', ''), CHARINDEX(' ', REVERSE(Surname)) - 1)
ELSE replace(replace(replace(replace(Surname, ',', ''), ' ', ''), '''', ''), '-', '')
END
ELSE replace(replace(replace(replace(PreName + Surname, ',', ''), ' ', ''), '''', ''), '-', '')
END AS 'User Name'
FROM Students
如果我犯了任何新手错误,请随意简化:)
答案 0 :(得分:0)
我认为你只需要在CASE
电话中包含LEFT
语句,例如
SELECT LEFT(CASE ... END, 20) AS 'User Name'
FROM Students
完整代码:
SELECT LEFT(CASE
WHEN LEN(replace(replace(replace(replace(PreName + Surname, ',', ''), ' ', ''), '''', ''), '-', '')) > 20
THEN
CASE
WHEN PreName LIKE '%-%' THEN LEFT(replace(replace(replace(replace(PreName, ',', ''), ' ', ''), '''', ''), '-', ''), CHARINDEX('-', (PreName)) - 1)
WHEN PreName LIKE '% %' THEN LEFT(replace(replace(replace(replace(PreName, ',', ''), ' ', ''), '''', ''), '-', ''), CHARINDEX(' ', (PreName)) - 1)
ELSE replace(replace(replace(replace(PreName, ',', ''), ' ', ''), '''', ''), '-', '')
END
+
CASE
WHEN Surname LIKE '%-%' THEN RIGHT(replace(replace(replace(replace(Surname, ',', ''), ' ', ''), '''', ''), '-', ''), CHARINDEX('-', REVERSE(Surname)) - 1)
WHEN Surname LIKE '% %' THEN RIGHT(replace(replace(replace(replace(Surname, ',', ''), ' ', ''), '''', ''), '-', ''), CHARINDEX(' ', REVERSE(Surname)) - 1)
ELSE replace(replace(replace(replace(Surname, ',', ''), ' ', ''), '''', ''), '-', '')
END
ELSE replace(replace(replace(replace(PreName + Surname, ',', ''), ' ', ''), '''', ''), '-', '')
END, 20) AS 'User Name'
FROM Students