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

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

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

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

Q&A

2回答

7434閲覧

SQLのUPDATE文で空白(半角・全角含)の抽出の仕方

kei5

総合スコア13

SQL

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

0グッド

0クリップ

投稿2016/05/26 08:25

Excel2013のVBAにてADO接続でSQL文を発行しています。
このときに空白(半角・全角含)条件でUPDATE文を記載する場合にデータが拾われてきません。

<SQL文>
sql = ""
sql = sql & " SELECT * FROM [" & .Worksheets(SheetHairetu(K)).Name & "$] "
sql = sql & " WHERE (LTrim(RTrim([売上1月])) = 0) and ([データソース] = '赤箱')"

rs.Open sql, CN

上記のSQLを実行しても空白条件のデータを拾ってくることができません。
エラーも出てこないので、WHERE 文をどのようにしたら、空白条件のデータを拾ってくるかを
教えていただければと思います。

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

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

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

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

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

coco_bauer

2016/05/26 08:57

WHERE句の中でRTrim,LTrimを適用しているということは[売上1月]は文字列という想定だと思われます。しかし、文字列=数字 という条件は一般には成り立たないのではないでしょうか?  LTrim(RTrim([売上1月])) = "0"であれば、売り上げが0のものが出てくると思います。
kei5

2016/05/26 09:10

連絡有難うございます。ADOでExcelセルを編集しようとしているのですが、セルの書式は「通貨」になっています。sqlのWhere句については以下のようにした場合にもデータが拾われてきません。 sql = sql & " WHERE (LTrim(RTrim([売上1月])) = ’’) and ([データソース] = '赤箱')" 「通貨」セルに空白が入っていた場合に空白データが拾われる条件が分かれば教えていただければと思います。
guest

回答2

0

IS NULL で取得できました。

SQL

1SELECT * FROM [Sheet1$] WHERE [売上1] IS NULL AND [データソース]='赤箱';

恐らくライブラリのバージョンは関係ないと思いますが、以下の2つ(自分のPCにある最古と最新)を試して、どちらも大丈夫でした。

[ツール]-[参照設定]から
Microsoft ActiveX Data Objects 2.0 Library
Microsoft ActiveX Data Objects 6.1 Library

投稿2016/05/27 04:35

ttyp03

総合スコア16998

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

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

kei5

2016/05/29 23:54

有難うございました。私のほうでも上手く抽出できることを確認しました。一方でADOの1月売上項目を編集してUpdate処理をかけようとすると、他のレコードまで更新してしまう事象が発生しています。ADOのupdate処理ではレコードセット内の全てのデータをアップデートかけてしまうのでしょうか? RS.Open sql, CN, adOpenStatic, adLockPessimistic If Not RS.EOF Then do until rs.eof RS.MoveFirst RS.Fields("売上1月").Value = "0" RS.Update RS.MoveNext loop end if もし、DAOを利用したほうが上手くいくのであれば、それもご教授いただければ幸いです。
ttyp03

2016/05/30 01:20

do until の次の行で、RS.MoveFirst をやっているのが気になります。 RS.MoveFirst をやらないコードでは、SQLの条件にマッチしたレコードのみが更新されることは確認できました。
guest

0

空白であれば、「''」か「~ IS NULL」で抽出できるのではないのでしょうか?

投稿2016/05/26 09:14

tomo.ina

総合スコア357

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

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

kei5

2016/05/26 09:19

有難うございます。Oracleならば、「IS NULL」は空白文字で拾われてきますが、今回はExcel上のデータなので、拾われてきません。同じく「''」でも試しましたが、エラーは表示されずにSQLが実行されてしまいます。ExcelのADOで空白文字を拾ってくる方法をご存知であれば教えていただきたいです。
kei5

2016/05/26 09:20

すみません。「''」の場合はSQLを実行してもデータは拾われません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問