SQL Q&A

 

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-04-04 10:45:25   2185

コメント

2014年 04月 04日 (11:49)
こんにちは。
イノ(inno)です。

再度質問をアップしてくださったのですね。
下記の質問でここまで回答ができずすみません。
それでは、これはいかがでしょうか!
これでご満足の回答になりましたでしょうか~
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
naoki 2014年 04月 04日 (12:08)
ありがとうございます。

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

例えば
A & B部 T1 & T2 お助けチーム UP 000001
A & B部 T1 & T2 お助けチーム DW 000002
A & B部 T1 & T2 お助けチーム 000003
などです。
2014年 04月 04日 (15:14)
こんにちは。
イノ(inno)です。

修正しました。
下記の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
naoki 2014年 04月 04日 (17:11)
ありがとうござます。

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

例えば
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年 04月 04日 (17:50)
こんにちは。
イノ(inno)です。

データには必ず「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
naoki 2014年 04月 05日 (11:41)
ありがとうございます。

>データには必ず「OOOチーム」の文字が入っていて
そうとも限らないです。
2014年 04月 05日 (19:23)
これは正確なルールがない限り難しそうですね。
役に立てずすみません。
naoki 2014年 04月 07日 (10:12)
そうですよね。
やはり、正確なルールがなければ無理ですよね。

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

SQL SERVER 店舗毎のTOP10

-.日付:2015-12-22   カテゴリ : -   閲覧数:685

SQLServer Management Studio サーバーへの接続履歴を削除したい  (1)

-.日付:2015-03-09   カテゴリ : -   閲覧数:2737

sql server 2008 でselect文のwhere句にcaseを使って複数条件をセットしたい

-.日付:2015-02-12   カテゴリ : -   閲覧数:1533

IDENTITY列の複数テーブルへのINSERT  (1)

-.日付:2014-10-02   カテゴリ : -   閲覧数:1549

Sqlのパフォーマンスについての質問です。  (1)

-.日付:2014-08-27   カテゴリ : -   閲覧数:1399

SELECT時にカウントアップ  (1)

-.日付:2014-08-25   カテゴリ : -   閲覧数:2257

「char」と「varchar」は何か違いがあるのでしょうか?  (1)

-.日付:2014-07-30   カテゴリ : -   閲覧数:1466

Copyright © 2015 INNOYA.COM All rights reserved. RSS