SQL查询 - LEFT(),20

时间:2015-06-03 15:29:39

标签: sql active-directory username

我花了一些时间尝试一起查询,根据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

如果我犯了任何新手错误,请随意简化:)

1 个答案:

答案 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