• 締切済み

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 を取り出したいのです お願いします。

みんなの回答

  • innoya
  • ベストアンサー率71% (10/14)
回答No.4

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

abc999xyz
質問者

お礼

そうですよね。 やはり、正確なルールがなければ無理ですよね。 丁寧、親切に対応していただきありがとう ござました。

全文を見る
すると、全ての回答が全文表示されます。
  • innoya
  • ベストアンサー率71% (10/14)
回答No.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

abc999xyz
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
  • innoya
  • ベストアンサー率71% (10/14)
回答No.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

abc999xyz
質問者

お礼

ありがとうござます。 一応、動きました。 私の質問の仕方が悪いのか、よくデータを確認せずに説明 をしているのがいけないのか データが規則正しくないものが出てきて上手く動きません。 例えば 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 と期待しています。 何だか、無理なような気がしてきました。

全文を見る
すると、全ての回答が全文表示されます。
  • innoya
  • ベストアンサー率71% (10/14)
回答No.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

abc999xyz
質問者

お礼

ありがとうございます。 一応、動きました。 ただ、データが規則正しくないものが出てきて上手く動きません。 部署名とかチーム名の間に半角スペースが複数存在するものがあり、チーム名の一部を表示します。 例えば A & B部 T1 & T2 お助けチーム UP 000001 A & B部 T1 & T2 お助けチーム DW 000002 A & B部 T1 & T2 お助けチーム 000003 などです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

    SQLServer2012で selectで文字列の末尾から(右から)ある文字の位置までを取り出したいのですが どのようなSQLにすればよいのでしょうか。 やりたいことは、 例えば、文字列「abc 123 xyz」があるとします。 末尾から(右から)見て、最初に見つかった半角スペースから後ろ「xyzを取り出し たいです。 RIGHT を使えば取り出すことはできるのですが、取り出したい文字列の長さが同じ でないので使うことができません。 お願いします。

  • MS SQLServer のSQLで文字列の前にN:

    MS SQLServer のSQLで文字列の前にN: をつけることをよく見かけますが、 「N:」とはいったいどんな意味なのでしょうか? 教えて下さい。

  • SQLserverでの列の削除について

    SQLserver2000にてSQL文の練習をしている、データベースの初心者です。 SQLserverでは、直接列の削除ができないと聞きました。 ---------------------------------------- ALTER TABLE テーブル名 DROP 列名 ---------------------------------------- ↑このようにはできませんでした。 そこで、いったん削除したい列以外の列がある別のテーブルをつくってからテーブル名を変更する方法として、 1,新しいテーブルを、元のテーブルからデータをコピーして作る。 2,元のテーブルを削除 3,新しいテーブルの名前を元の名前に変更。 という手段を使えばよいという情報を得ましたが、1の部分がどうしてもできません。 (テーブル削除、テーブル名の変更はできました) ---------------------------------------- CREATE TABLE 新しいテーブル名 AS SELECT 削除した列以外の列名 FROM 元のテーブル名 ---------------------------------------- このようにすると、 ---------------------------------------- サーバー : メッセージ 156、レベル 15、状態 1、行 2 キーワード 'AS' 付近に正しくない構文があります。 ---------------------------------------- といわれてしまいます。 EnterpriseManagerを使わずにやる方法が知りたいです。 正しいSQL文をどうかご教授ください。 どうぞよろしくお願いいたします。 ※ちなみにOSはWIN2000を使っています。

  • splitを使ってスペース位置で文字列を区切りたい

    splitを使ってスペース位置で文字列を区切りたいのですが、 String[] word = str.split(" ",0);  //半角空白 のように書くと、全角スペースは区切りとしてみなされず、 String[] word = str.split(" ",0);  //全角空白 のように書くと、半角スペースは区切りとしてみなしてくれません。 全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • 文字列の' '(全角空白)の開始位置を返す関数

    SQLServer2000で、文字列の' '(全角空白)の開始位置を返す関数を教えて下さい。 CHARINDEX かな?と思い試してみましたが、違ってたみたいで・・・。 よろしくお願い致します。

  • エクセルの文字列検索で何番目の$の位置?

    たとえば、$A$1:$AG$25とか$AB$100:$AG$2550という文字列から、 1.文字列末尾の数値を取得する関数はあるでしょうか? 2.3番目の$の位置、4番目の$の位置を取得できる関数はあるでしょうか?

  • SQL:複数行のデータを一つの文字列にまとめたい

    複数行のデータを一つの文字列にまとめる方法を教えてください。 ※環境SQLServer2005 例: ID DATA AA XXX BB YYY AA ZZZ 次のようなテーブルがあるとき、IDがAAであるものを一つの文字列 "XXXZZZ" にまとめたデータにSQLで加工したいです。

  • RandomAccessFile文字列の上書き

    ただいまjavaを勉強中で、RandomAccessFileでいろいろやってみているところです。 RandomAccessFileで文字列を読み書きするときは readUTF() と writeUTF() を使うってことでいいんでしょうか? そう思って今やっているのですが、うまくいかないことがあります。 writeUTF() で文字列をいくつか書き込んで、 後で任意の位置の文字列を書き換えようとしています。 で、まず、いくつデータを書き込んだのか調べるために、 readUTF() とカウンタを使って数えようと思ったんですが、 繰り返しの最中にファイルの末尾に達してしまい、終了してしまいます。 さっきまではそれで数えられていた気がしたんですが、 ちょっとどこかをいじった後、できなくなってしまいました。 上書きについては、元のファイルの、任意の位置の手前までデータを読み込んでファイルポインタを進めて その後上書きしたいデータを書き込むようにしました。 全体的によろしくないやり方でしたら、そのあたりも指摘していただけるとうれしいです。 どうぞよろしくお願いします。

    • ベストアンサー
    • Java
  • 文字列をsplitするSQL文を教えて下さい

    SQLServer2000上で指定した文字で文字列をsplitような関数があれば教えて頂けますか? 例えば"12345.6789"という文字列を"."(ピリオド)を指定して、"12345"と"6789"という2つの文字列を取得したいと思っています。 Transact-SQLの関数リファレンスを見てみたのですが、適当なものが見つかりませんでした。 自作するしかないのでしょうか・・

  • 末尾の全角スペースの削除

    SQL Server 2008環境です。 文字列の末尾の空白を一括して削除したくて、以下のようなクエリを書きました。 UPDATE TEST_TABLE SET NAME = REPLACE(RTRIM(REPLACE(StoreBranchName, ' ', ' ')), ' ', ' ') 全角スペースを一度半角スペースにして、RTRIMをかけた後、最後に 半角スペースを全角に直すというものです。 しかし、これだと、元々半角スペースが入っていた場合、そっちまで全角スペースに なってしまうため悩んでおります。 うまいやり方を教えていただけないでしょうか。 宜しくお願いします。

このQ&Aのポイント
  • ステンレスの鍋底にできた白い斑点、一度茹でただけでできることがあります。これは何なのでしょうか?
  • 斑点を取るために試した方法はげき落ちくんや重曹ですが、なかなか取れません。酸性の物で洗うことも考えましたが、ステンレスを傷つけないか心配です。
  • ステンレスの鍋底にできた白い斑点の取り方を知りたいです。鍋を新しく購入したばかりなので、今後も同じ問題が起きないようにしたいです。
回答を見る