2016-11-23 6 views
-1

カラム内の文字列からサーバ名を取得したい。
sqlテーブルの列からサーバパスからサーバ名を取得

CREATE TABLE #Sample(ServerPath varchar(50)) 
    GO 
    INSERT INTO #Sample (ServerPath) VALUES ('\\TestServer1\Test') 
    INSERT INTO #Sample (ServerPath) VALUES ('\\TestServer2\Test') 
    INSERT INTO #Sample (ServerPath) VALUES ('\\TestServer3\Test') 
INSERT INTO #Sample (ServerPath) VALUES ('TestServer4) 
    SELECT * FROM #Sample 
    GO 
    DROP TABLE #Sample`enter code here` 

私は実行するか、私に期待される結果を与えるSQLの正規表現するためにどのようなSQLコマンドの最初のシングルスラッシュ

TestServer1 
TestServer2 
TestServer3 

にダブルスラッシュの間にある文字列のような出力をしたいです。

答えて

1

これは(タグごとに)正規表現である必要はありません。このようなものを使ってください。

CREATE TABLE #Sample(ServerPath varchar(50)) 
INSERT INTO #Sample (ServerPath) 
VALUES 
('\\TestServer1\Test') 
,('\\TestServer2\Test') 
,('\\TestServer3\Test') 

SELECT 
SUBSTRING(ServerPath,3,CHARINDEX('\',ServerPath,3)-3) Result 
FROM #Sample 

Result 
TestServer1 
TestServer2 
TestServer3 

これは、最初にチェックするためにこれを使用しますが、その後、バックスラッシュなしでデータを持っていれば、それは常に二重のバックスラッシュ

から始まると仮定しています。

CREATE TABLE #Sample(ServerPath varchar(50)) 
INSERT INTO #Sample (ServerPath) 
VALUES 
('\\TestServer1\Test') 
,('\\TestServer2\Test') 
,('\\TestServer3\Test') 
,('TestServer4') 

SELECT 
CASE 
    WHEN CHARINDEX('\\',ServerPath) = 0 
     THEN ServerPath 
    ELSE SUBSTRING(ServerPath,3,CHARINDEX('\',ServerPath,3)-3) 
END Result 
FROM #Sample 
GO 
DROP TABLE #Sample 

Result 
TestServer1 
TestServer2 
TestServer3 
TestServer4 
+0

こんにちは@リッチ、ありがとう、しかしそれは私に次のエラーを与える。 msgstr "無効な長さパラメータがLEFTまたはSUBSTRING関数に渡されました。" – Aamir

+0

バックスラッシュが含まれていないデータはありますか?また、二重バックスラッシュで始まらないデータもありますか? –

+0

はい、同じ列にD:\ TestFolderのようなデータがあります – Aamir

関連する問題