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