質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

4回答

4584閲覧

SQL文で指定文字数の抽出方法を教えて下さい。

cd987456

総合スコア33

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/04/21 01:18

編集2017/04/21 02:40

VBAのADODB.ConnectionオブジェクトとSQL文を使ってエクセルにデータ抽出しようとしています。
SELECT文でOracle Database抽出しようとしています。

下記の場合の抽出方法が分かりません。

内容はテーブル内の特定フィールドから指定文字数を抽出したいです。

【受注テーブル】・・テーブルIDは ”JUTYU”
フィールドは4つで”CODE”と”NAME”、"SIIRE"、"SHUKKA"です。
CODEは商品品番、NAMEはその商品名、SIIREは入荷日、SHUKKAは出荷日のイメージです。

CODE NAME SIIRE SHUKKA
A123 テレビ 201704211 201704171
A124 冷蔵庫 201704211 201704171
A125 Fax 201704211 201704171
A126 パソコン 201704251 201704191
A127 プレーヤー 201704251 201704191
A128 洗濯機 201704251 201704191

ここで、"SIIRE"、"SHUKKA"は9桁の数字になっています。
西暦4桁+月2桁+日2桁+1
抽出結果には下1桁の”1”は削除し、
8桁(西暦4桁+月2桁+日2桁)で抽出したいです。

Dim strSQL As String strSQL = "select JUTYU.CODE,JUTYU.NAME,LEFT('JUTYU.SIIRE',8),LEFT('JUTYU.SHUKKA',8)" strSQL = strSQL & " from JUTYU"

"SIIRE"、"SHUKKA" はLEFTを使って左から8桁を抽出するようにしたつもりなのですが、
上手くできません。

修正コードを教えて頂きたいです。

★回答を頂き、SUBSTR(SIIRE,1,8),SUBSTR(SHUKKA,1,8) とすることで8桁で抽出することができました。
しかし、フィールド名を表示しなくなってしまいました。
フィールド名は下記コードで表示させています。エクセルへの出力シートは抽出結果です。

wMX = adoRs.Fields.Count For N = 1 To wMX With Sheets("抽出結果") .Cells(1, N) = adoRs.Fields(N - 1).NAME End With Next

文字数指定で抽出するとフィールド名が表示されなくなるのでしょうか?
教えて頂きたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ORACLEにはLEFT関数は用意されていないようなので、SUBSTR関数を使うことになります。
また列名をシングルクォーテーションで囲ってしまうと文字列扱いになっていないでしょうか。

VBA

1strSQL = "select CODE,NAME,SUBSTR(SIIRE,1,8),SUBSTR(SHUKKA,1,8)" 2strSQL = strSQL & " from JUTYU"

投稿2017/04/21 01:38

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Oracle に LEFT 関数はありません。
SUBSTR 関数を使用してください。

あと
LEFT('JUTYU.SIIRE',8)
ですが、列名をシングルクォートで囲む必要はありません。

投稿2017/04/21 01:34

workaholist

総合スコア559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SUBSTR('JUTYU.SIIRE',1,8)としてみると如何でしょうか?

参考サイト

投稿2017/04/21 01:31

motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

SELECT JUTYU.CODE, JUTYU.NAME, REGEXP_REPLACE(JUTYU.SIIRE, '(\d{4})(\d{2})(\d{2})', '\1/\2/\3'), REGEXP_REPLACE(JUTYU.SHUKKA, '(\d{4})(\d{2})(\d{2})', '\1/\2/\3') FROM JUTYU

とかどうでしょう。
2017-04-21 10:10:10 とかのフォーマットでも対応出来ますよ。

投稿2017/04/21 01:38

編集2017/04/21 02:48
kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cd987456

2017/04/21 02:42

回答ありがとうございます。 REGEXP_SUBSTR(JUTYU.SIIRE, '(\d{8})')で抽出した時、表示方法をyyyy/mm/dd としたいの ですが、どうも上手くいきません。教えて頂けると幸いです。
kunai

2017/04/21 02:47

回答文を修正しました。regexp_substrではなく、regexp_replaceを使えばOKです
cd987456

2017/04/21 06:03

上手く抽出できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問