以下のような文字列が入力された列、FullPCNameがある。このFullPCNameからコンピュータ名だけを抽出したい。
FullPCName
————————————–
Tokyo332#server01.sql.jpn.org
Fukuoka00321#server02.sql.jpn.org
server03.sql.jpn.org
Sapporo883#server04.sql.jpn.org
server04.sql.jpn.org
server05
:
server01やserver02のように、ドメイン名を除いたコンピュータ名のみを表示させるにはどのようなSQL文にすれば良いか?
回答例:
PCName
——————————–
server01
server02
server03
server04
server04
server05
MS SQL Serverでの回答案
まず、ドメイン名をブランクで置き換える事から考えましょう。指定した文字列を置換するには、REPLACE関数を使用します。
REPLACE(列名, 置換対象文字列, 置換後の文字列)
SELECT REPLACE(FullPCName, ‘.sql.jpn.org’, ”) as PCName FROM DRILL001;
PCName
———————————————-
Tokyo332#server01
Fukuoka00321#server02
server03
Sapporo883#server04
server04
server05
次はTokyo0332#のような文字列がある場合は、それを取り除く必要があります。そのためには、まず、#以前の文字列を抽出します。抽出するためには、先頭から#までの文字数を取得して、SUBSTRING関数で文字列を取得します。
SELECT CHARINDEX(‘#’, REPLACE(FullPCName, ‘.sql.jpn.org’, ”)) AS ‘文字数’ from DRILL001;
文字数
—————————–
9
13
0
11
0
0SELECT SUBSTRING(REPLACE(FullPCName, ‘.sql.jpn.org’, ”), 0, CHARINDEX(‘#’, REPLACE(FullPCName, ‘.sql.jpn.org’, ”))+1) AS ‘取り除く文字列’ from DRILL001;
取り除く文字列
——————————
Tokyo332#
Fukuoka00321#
<NULL>
Sapporo883#
<NULL>
<NULL>
最後にREPLACE関数で取り除く文字列をNULLで置き換えます。
SELECT REPLACE(REPLACE(FullPCName, ‘.sql.jpn.org’, ”), SUBSTRING(REPLACE(FullPCName, ‘.sql.jpn.org’, ”), 0, CHARINDEX(‘#’, REPLACE(FullPCName, ‘.sql.jpn.org’, ”))+1), ”) AS ‘PCName’?from DRILL001;
PCName
——————————–
server01
server02
server03
server04
server04
server05
とても複雑になってしまいましたね。他の最適な方法があれば教えてください。