¿Cómo analizar datos en SQL Server 2008?

Tengo un nombre de columna llamado Nombre de usuario en mi tabla en SQL Server 2008. El nombre de usuario tiene los siguientes datos

Username
corp\abc
corp\petern
corp\timw

y así

Necesito que mi nombre de usuario sea

Username
abc
petern
timw

¿Cómo analizo los datos en Nombre de usuario para omitir corp\?

Gracias.

preguntado el 03 de mayo de 12 a las 15:05

4 Respuestas

Podrías usar NOMBRE DE PARSE para dividir los datos pero la función usa punto (.) como delimitador. Por lo tanto, primero debe reemplazar las barras inclinadas hacia atrás (\) con punto o punto (.).

Haga clic aquí para ver la demostración en SQL Fiddle.

Guión:

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;

Salida:

USERNAME            USERNAMEONLY
-----------------   ------------
corp\abc            abc
corp\corporate\ 
corp\yescorp        yescorp
corp\def            def
\corpabc\   
corpabc\    

contestado el 03 de mayo de 12 a las 15:05

Puede usar la siguiente expresión para extraer el nombre de usuario:

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

Si no hay una barra invertida en la función de nombre de usuario, devolverá el nombre de usuario completo; es práctico si combina el servidor sql y la autenticación de Windows.

contestado el 03 de mayo de 12 a las 15:05

Update dbo.Users
Set    Username = replace(Username, 'corp\\', '');

Verifique la cita de antemano, verificando primero si los resultados de select parecen correctos (en general, es una buena práctica con las declaraciones de actualización de datos):

select replace(Username, 'corp\\', '') from dbo.Users

contestado el 03 de mayo de 12 a las 15:05

Puede obtener el nombre de usuario de esta manera:

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

=>

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

Este trabajo en texto, nvarchar(n - max)

contestado el 03 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.