0

SQL Server 2008 のテーブルに Username という名前の列があります。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 サーバーと Windows 認証を混在させる場合に実用的です。

于 2012-05-03T14:46:37.833 に答える
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 に答える
0
Update dbo.Users
Set    Username = replace(Username, 'corp\\', '');

select の結果が問題ないように見えるかどうかを最初にチェックして、事前に引用をチェックしてください (一般に、データ更新ステートメントを使用することをお勧めします)。

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