SQL Server 2008 のテーブルに Username という名前の列があります。Username には次のデータがあります。
Username
corp\abc
corp\petern
corp\timw
等々
ユーザー名が必要です
Username
abc
petern
timw
Username のデータを解析して corp\ をスキップするにはどうすればよいですか?
ありがとう。
SQL Server 2008 のテーブルに Username という名前の列があります。Username には次のデータがあります。
Username
corp\abc
corp\petern
corp\timw
等々
ユーザー名が必要です
Username
abc
petern
timw
Username のデータを解析して corp\ をスキップするにはどうすればよいですか?
ありがとう。
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\
ユーザー名を抽出するには、次の式を使用できます。
select substring (username, charindex ('\', username, 1) + 1, len(username))
ユーザー名関数にバックスラッシュがない場合、ユーザー名全体が返されます。SQL サーバーと Windows 認証を混在させる場合に実用的です。
次のようなユーザー名を取得できます。
SELECT RIGHT('corp\username',LEN('corp\username')-PATINDEX('%\%','corp\username'))
=>
SELECT RIGHT(username,LEN(username)-PATINDEX('%\%',username))
これはテキストで動作します、nvarchar(n-max)
Update dbo.Users
Set Username = replace(Username, 'corp\\', '');
select の結果が問題ないように見えるかどうかを最初にチェックして、事前に引用をチェックしてください (一般に、データ更新ステートメントを使用することをお勧めします)。
select replace(Username, 'corp\\', '') from dbo.Users