こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

SQLServerで文字列の末尾からある位置で取出

SQLServerで文字列の末尾からある位置で取出
SQLServer2012で
selectで文字列の末尾から(右から)ある文字の位置までを取り出したいのですが
どのようなSQLにすればよいのでしょうか。

やりたいことは、
データとしては
部署名△チーム名△UP△0000001
部署名△チーム名△DW△0000002
部署名△チーム名△w00001
部署名△チーム名△000003
:
:
部署名△チーム名△UP△100001
部署名△チーム名△DW△100002
※△=半角スペース

の様なデータから獲たいデータは、
UP△000001
DW△000002
w00001
000003
;
UP△100001
DW△100002

を取り出したいのです

お願いします。

投稿日時 - 2014-03-07 17:10:51

QNo.8503956

困ってます

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.4

これは正確なルールがない限り難しそうですね。
役に立てずすみません。

投稿日時 - 2014-03-17 11:14:30

お礼

そうですよね。
やはり、正確なルールがなければ無理ですよね。

丁寧、親切に対応していただきありがとう
ござました。

投稿日時 - 2014-03-18 08:19:17

ANo.3

こんにちは。

データには必ず「OOOチーム」の文字が入っていて
その後の文字を抽出したいですか??

それなら下記のSQLを確認してください。
どうでしょうか?


CREATE TABLE dbo.TempData
(
Data1 varchar(100)
)


INSERT INTO dbo.TempData
SELECT 'A 部 A1 チーム UP 000001' UNION ALL
SELECT 'A 部 A2 チーム 000002' UNION ALL
SELECT 'A 部 A3 チーム DW 000003' UNION ALL
SELECT 'B B 部 BB1 チーム UP 000004' UNION ALL
SELECT 'B B 部 BB2 チーム 000005' UNION ALL
SELECT 'B B 部 BB3 チーム UP 000006' UNION ALL
SELECT 'C CCC 部 CCC1 チーム tokyo 000007' UNION ALL
SELECT 'C CCC 部 CCC2 チーム tokyo' UNION ALL
SELECT 'C CCC 部 CCC3 チーム UP 000009' UNION ALL
SELECT 'D DD 部 DD1 チーム 000010' UNION ALL
SELECT 'D DD 部 DD2 チーム DW 000011'


SELECT SUBSTRING(Data1, CHARINDEX('チーム',Data1)+4, LEN(Data1)-CHARINDEX('チーム',Data1)+4)
FROM dbo.TempData


--実行結果
UP 000001
000002
DW 000003
UP 000004
000005
UP 000006
tokyo 000007
tokyo
UP 000009
000010
DW 000011

投稿日時 - 2014-03-13 12:48:10

お礼

ありがとうございます。

>データには必ず「OOOチーム」の文字が入っていて
そうとも限らないです。

投稿日時 - 2014-03-14 08:21:48

ANo.2

こんにちは。

修正しました。
下記のSQLを確認してください。
どうでしょうか?

CREATE TABLE dbo.TempData
(
Data1 varchar(100)
)


INSERT INTO dbo.TempData
SELECT 'A 部 A1 チーム UP 000001' UNION ALL
SELECT 'A 部 A2 チーム 000002' UNION ALL
SELECT 'A 部 A3 チーム DW 000003' UNION ALL
SELECT 'B B 部 BB1 チーム UP 000004' UNION ALL
SELECT 'B B 部 BB2 チーム 000005' UNION ALL
SELECT 'B B 部 BB3 チーム UP 000006' UNION ALL
SELECT 'C CCC 部 CCC1 チーム 000007' UNION ALL
SELECT 'C CCC 部 CCC2 チーム 000008' UNION ALL
SELECT 'C CCC 部 CCC3 チーム UP 000009' UNION ALL
SELECT 'D DD 部 DD1 チーム 000010' UNION ALL
SELECT 'D DD 部 DD2 チーム DW 000011'


SELECT CASE WHEN SUBSTRING(REVERSE(Data1), CHARINDEX(' ',REVERSE(Data1))+1, 2) IN ('PU', 'WD') THEN RIGHT(Data1, CHARINDEX(' ',REVERSE(Data1))+2) ELSE RIGHT(Data1, CHARINDEX(' ',REVERSE(Data1))-1) END
FROM dbo.TempData


実行結果
UP 000001
000002
DW 000003
UP 000004
000005
UP 000006
000007
000008
UP 000009
000010
DW 000011

投稿日時 - 2014-03-12 11:56:34

お礼

ありがとうござます。

一応、動きました。
私の質問の仕方が悪いのか、よくデータを確認せずに説明
をしているのがいけないのか
データが規則正しくないものが出てきて上手く動きません。

例えば
A & B部 T1 & T2 お助けチーム UP 000001
A & B部 T1 & T2 お助けチーム DOWN 000002
A & B部 T1 & T2 お助けチーム Tokyo
A & B部 T1 & T2 お助けチーム Tokyo Japan
A & B部 T1 & T2 お助けチーム UP Tokyo
A & B部 T1 & T2 お助けチーム DOWN Tokyo Japan
などがでてきました。

結果としては
UP 000001
DOWN 000002
Tokyo
Tokyo Japan
UP Tokyo
DOWN Tokyo Japan
と期待しています。

何だか、無理なような気がしてきました。

投稿日時 - 2014-03-12 23:04:59

ANo.1

こんにちは。

再度質問をアップしてくださったのですね。
下記の質問でここまで回答ができずすみません。
それでは、これはいかがでしょうか!
これでご満足の回答になりましたでしょうか~
substringとcharindexを使いました。
少し複雑に見えますが、
一つ一つ並べてみればそんなに複雑ではないと思います。
もし分からないことがありましたら、また質問してください。
よろしくお願い致します。


CREATE TABLE dbo.TempData
(
Data1 varchar(100)
)


INSERT INTO dbo.TempData
SELECT 'A部 A1チーム UP 000001' UNION ALL
SELECT 'A部 A2チーム 000002' UNION ALL
SELECT 'A部 A3チーム DOWN 000003' UNION ALL
SELECT 'BB部 BB1チーム UP 000004' UNION ALL
SELECT 'BB部 BB2チーム 000005' UNION ALL
SELECT 'BB部 BB3チーム UP 000006' UNION ALL
SELECT 'CCCC部 CCC1チーム 000007' UNION ALL
SELECT 'CCCC部 CCC2チーム 000008' UNION ALL
SELECT 'CCCC部 CCC3チーム UP 000009' UNION ALL
SELECT 'DDD部 DD1チーム 000010' UNION ALL
SELECT 'DDD部 DD2チーム DOWN 000011'


SELECT SUBSTRING(SUBSTRING(Data1, CHARINDEX(' ', Data1)+1, LEN(Data1)-CHARINDEX(' ', Data1)+1), CHARINDEX(' ', SUBSTRING(Data1, CHARINDEX(' ', Data1)+1, LEN(Data1)-CHARINDEX(' ', Data1)+1) )+1, LEN(Data1)-CHARINDEX(' ', SUBSTRING(Data1, CHARINDEX(' ', Data1)+1, LEN(Data1)-CHARINDEX(' ', Data1)+1) )+1)
FROM dbo.TempData


実行結果
UP 000001
000002
DOWN 000003
UP 000004
000005
UP 000006
000007
000008
UP 000009
000010
DOWN 000011

投稿日時 - 2014-03-10 11:09:48

お礼

ありがとうございます。

一応、動きました。
ただ、データが規則正しくないものが出てきて上手く動きません。
部署名とかチーム名の間に半角スペースが複数存在するものがあり、チーム名の一部を表示します。

例えば
A & B部 T1 & T2 お助けチーム UP 000001
A & B部 T1 & T2 お助けチーム DW 000002
A & B部 T1 & T2 お助けチーム 000003
などです。

投稿日時 - 2014-03-12 08:34:15

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-