C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: Replace はサポートされません


(過去ログ 34 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■16708 / inTopicNo.1)  氏名間の空白を削除(Replace以外wo)
  
□投稿者/ @@ (1回)-(2008/04/09(Wed) 20:28:39)

分類:[.NET 全般] 

テーブル1    テーブル2    
氏名       名前
田中 太郎    田中太郎
鈴木 次郎    鈴木次郎
武田 加奈子   武田加奈子
  

のようなテーブルがあります
VB.Net上でSQL文を作成してテーブル2とテーブル1のマッチングを行いたいんですが。

(*実際はテーブル2はテーブル1とは関係のないデータなので結合などの方法は使いません。
テーブル2のデータはプログラム上で他のモジュールから取ってきて変数にいれて使っています。)


テーブル1には氏名間にスペースがあるため、テーブル1のスペースを削除してテーブル2とのマッチングを行いたいです。(プログラム上このような仕様にしなければなりません。)

この際にReplaceを使えば完璧なんですが、VB.Net上でするとできませんでした。ACCESSではできました。

SELECT Replace(氏名," ","") FROM テーブル1 WHERE Replace(氏名," ","") = "田中太郎"


↑これと同じような氏名間の空白を取り除いてやりたいんですがやりかたがわかりません
(実際は田中太郎の所にテーブル2のデータを持っている変数がはいります。)

Replace意外の方法がわかる方いましたら教えてください。よろしくお願いします。

引用返信 編集キー/
■16709 / inTopicNo.2)  Re[1]: 氏名間の空白を削除(Replace以外wo)
□投稿者/ @@ (1回)-(2008/04/09(Wed) 20:30:42)
すいませんタイトルを入力してる時にEnterを押してしまってタイトル記入途中に投稿してしまいました・・・
引用返信 編集キー/
■16710 / inTopicNo.3)  Re[2]: 氏名間の空白を削除(Replace以外wo)
□投稿者/ 魔界の仮面弁士 (687回)-(2008/04/09(Wed) 21:11:22)
投稿時の名前は途中で変えず、一貫した名前を使用してください。m(_ _)m

> この際にReplaceを使えば完璧なんですが、VB.Net上でするとできませんでした。ACCESSではできました。
お使いのデータベースは何ですか?
JET であれば、REPLACE が使用可能だと思います。

Oracle であれば、
 REPLACE('田中 太 郎', ' ', NULL)
は '田中太郎' を返しますね。

引用返信 編集キー/
■16719 / inTopicNo.4)  Re[3]: 氏名間の空白を削除(Replace以外wo)
□投稿者/ @@ (3回)-(2008/04/09(Wed) 23:53:42)
No16710 (魔界の仮面弁士 さん) に返信
> 投稿時の名前は途中で変えず、一貫した名前を使用してください。m(_ _)m

申し訳ないです(汗


> お使いのデータベースは何ですか?
> JET であれば、REPLACE が使用可能だと思います。

回答ありがとうございます☆

データベースというかディレクトリの中に保存されたmdbファイルの中のテーブルを見てるので、たぶんデータベースはつかってない???
と思います、すいませんデータベースとかACCESSとかあんまり理解してないので検討違いだったらごめんなさい・・

でも接続文字列を作成する際にJETとか書いてた気がします・・よくわからないのでまた明日調べてみます。


ACCESS上のクエリで

SELECT Replace(氏名," ","") FROM テーブル1 WHERE Replace(氏名," ","") = "田中太郎"

を実行したらちゃんと空白なしのデータがとれてたんですが
VB.Netプログラム上でこのコードを実行すると'関数Repleceは未定義です'みたいな感じのエラーがでてきました。

この場合のエラーがでてもReplaceは使えるんでしょうか??
引用返信 編集キー/
■16732 / inTopicNo.5)  Replace はサポートされません
□投稿者/ 魔界の仮面弁士 (688回)-(2008/04/10(Thu) 01:52:04)
No16719 (@@ さん) に返信
>>お使いのデータベースは何ですか?
>>JET であれば、REPLACE が使用可能だと思います。

すみません。上記は間違いです。m(_ _)m

Replace は、JET データベースエンジン自体が持つ関数ではないため使用できません。
(Access 経由であれば、VBA の Replace 関数を SQL 中で利用できるのですが)


SQL ベースでマッチングさせるとなると、たとえば
 WHERE 氏名 IN ('田中太郎', '田 中太郎', '田中 太郎', '田中太 郎')
のような冗長なコードが必要になるので、DataTable に取り出して個々にマッチングさせるとか、
元のデータの持ち方を見直すなどの対処が必要になりそうです。
引用返信 編集キー/
■16803 / inTopicNo.6)  Re[5]: Replace はサポートされません
□投稿者/ やじゅ (291回)-(2008/04/10(Thu) 19:11:53)
>DataTable に取り出して個々にマッチングさせるとか、

個々だと速度的に難があるけどね。

IgnoreSymbolsは空白文字、句読点、通貨記号などなどを無視する比較
http://d.hatena.ne.jp/siokoshou/20050413#1113378840

Dim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("ja-JP")
Dim a As Integer
Dim y1 As String = "田中太郎"
Dim y2 As String = "田中 太郎"
a = ci.CompareInfo.IndexOf(y1, y2, Globalization.CompareOptions.IgnoreSymbols)
MessageBox.Show(String.Format("({0} == {1}) => {2}", y1, y2, a))
引用返信 編集キー/
■16814 / inTopicNo.7)  Re[5]: Replace はサポートされません
□投稿者/ @@ (4回)-(2008/04/10(Thu) 23:07:39)
No16732 (魔界の仮面弁士 さん) に返信
> ■No16719 (@@ さん) に返信

>DataTable に取り出して個々にマッチングさせるとか、
> 元のデータの持ち方を見直すなどの対処が必要になりそうです。

結局仕様的に、一旦テーブル1の氏名を*で全部取ってきてループ文を使い変数に代入

Select * From テーブル1

これをループを使い変数に代入してそれから空白を削除
空白を削除した変数と、もとから変数に取得してあるテーブル2のデータと一致すれば出力する

という風にしました。
一時的にデータテーブルに保存させて取得すればいいかなと思ったんですがデータテーブルにはSQLつかえないんですね^^;
処理的に問題がありますが今のところこれしかないのかなあて感じで・・・
助言ありがとうございましたたすかりました!!
引用返信 編集キー/
■16815 / inTopicNo.8)  Re[6]: Replace はサポートされません
□投稿者/ @@ (5回)-(2008/04/10(Thu) 23:09:31)
No16803 (やじゅ さん) に返信
> >DataTable に取り出して個々にマッチングさせるとか、
>
> 個々だと速度的に難があるけどね。

処理は元から遅かったんですがやっぱりそれ以上に遅くなりました^^;

> IgnoreSymbolsは空白文字、句読点、通貨記号などなどを無視する比較
> http://d.hatena.ne.jp/siokoshou/20050413#1113378840
>
> Dim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("ja-JP")
> Dim a As Integer
> Dim y1 As String = "田中太郎"
> Dim y2 As String = "田中 太郎"
> a = ci.CompareInfo.IndexOf(y1, y2, Globalization.CompareOptions.IgnoreSymbols)
> MessageBox.Show(String.Format("({0} == {1}) => {2}", y1, y2, a))

こんなやりかたもあるんですね。
これはSQL内に定義して使えるんでしょうか?
明日時間があればこれ試してみようと思います!!

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -