如何解析SQL Server 2008中的数据?

时间:2012-05-03 14:40:44

标签: sql-server sql-server-2008 tsql

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

Username
corp\abc
corp\petern
corp\timw

等等

我需要用户名

Username
abc
petern
timw

如何解析用户名中的数据以跳过corp \?

感谢。

4 个答案:

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