0

我在 SQL Server 2008 的表中有一个名为 Username 的列名。用户名有以下数据

Username
corp\abc
corp\petern
corp\timw

等等

我需要我的用户名

Username
abc
petern
timw

如何解析 Username 中的数据以跳过 corp\ ?

谢谢。

4

4 回答 4

3

您可以使用PARSENAME来拆分数据,但该函数使用点 ( .) 作为分隔符。因此,您必须首先将反斜杠 ( \) 替换为句点或点 ( .)。

单击此处查看 SQL Fiddle 中的演示。

脚本

CREATE TABLE users
( 
    username VARCHAR(30) NOT NULL
);

INSERT INTO users (username) VALUES
     ('corp\abc'),
     ('corp\corporate\'),
     ('corp\yescorp'),
     ('corp\def'),
     ('\corpabc\'),
     ('corpabc\');

SELECT  username
    ,   PARSENAME(REPLACE(username, '\', '.'), 1) AS usernameonly
FROM    users;

输出

USERNAME            USERNAMEONLY
-----------------   ------------
corp\abc            abc
corp\corporate\ 
corp\yescorp        yescorp
corp\def            def
\corpabc\   
corpabc\    
于 2012-05-03T14:59:11.770 回答
1

您可以使用以下表达式来提取用户名:

select substring (username, charindex ('\', username, 1) + 1, len(username))

如果用户名函数中没有反斜杠将返回整个用户名 - 如果您混合使用 sql server 和 Windows 身份验证,则实用。

于 2012-05-03T14:46:37.833 回答
0
Update dbo.Users
Set    Username = replace(Username, 'corp\\', '');

请事先检查引用,首先检查 select 的结果是否正常(通常,使用数据更新语句是一个很好的做法):

select replace(Username, 'corp\\', '') from dbo.Users
于 2012-05-03T14:48:26.153 回答
0

您可以像这样获取用户名:

SELECT RIGHT('corp\username',LEN('corp\username')-PATINDEX('%\%','corp\username'))

=>

SELECT RIGHT(username,LEN(username)-PATINDEX('%\%',username))

这项工作在文本上,nvarchar(n - max)

于 2012-05-03T14:50:48.573 回答