我在SQL Server 2008的表中有一个名为Username的列名。 用户名具有以下数据
Username
corp\abc
corp\petern
corp\timw
等等
我需要用户名
Username
abc
petern
timw
如何解析用户名中的数据以跳过corp \?
感谢。
答案 0 :(得分:3)
您可以使用PARSENAME拆分数据,但该函数使用点(.
)作为分隔符。因此,您必须先用句点或点(\
)替换反斜杠(.
)。
Click here to view the demo in 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\
答案 1 :(得分:1)
您可以使用以下表达式来提取用户名:
select substring (username, charindex ('\', username, 1) + 1, len(username))
如果用户名函数中没有反斜杠,则会返回整个用户名 - 如果混合使用sql server和Windows身份验证,则会很实用。
答案 2 :(得分:0)
Update dbo.Users
Set Username = replace(Username, 'corp\\', '');
请事先检查引用,首先检查select的结果是否正常(通常这是一个很好的数据更新语句):
select replace(Username, 'corp\\', '') from dbo.Users
答案 3 :(得分:0)
您可以获得如下用户名:
SELECT RIGHT('corp\username',LEN('corp\username')-PATINDEX('%\%','corp\username'))
=>
SELECT RIGHT(username,LEN(username)-PATINDEX('%\%',username))
这项工作在文本上,nvarchar(n - max)