C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
ログ内検索
キーワードを複数指定する場合は 半角スペース で区切ってください。
検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
[返信]をクリックすると返信ページへ移動します。
キーワード
/
検索条件
/
(AND)
(OR)
検索範囲
/
(現在のログ)
(全過去ログ)
(過去ログ1)
(過去ログ2)
(過去ログ3)
(過去ログ4)
(過去ログ5)
(過去ログ6)
(過去ログ7)
(過去ログ8)
(過去ログ9)
(過去ログ10)
(過去ログ11)
(過去ログ12)
(過去ログ13)
(過去ログ14)
(過去ログ15)
(過去ログ16)
(過去ログ17)
(過去ログ18)
(過去ログ19)
(過去ログ20)
(過去ログ21)
(過去ログ22)
(過去ログ23)
(過去ログ24)
(過去ログ25)
(過去ログ26)
(過去ログ27)
(過去ログ28)
(過去ログ29)
(過去ログ30)
(過去ログ31)
(過去ログ32)
(過去ログ33)
(過去ログ34)
(過去ログ35)
(過去ログ36)
(過去ログ37)
(過去ログ38)
(過去ログ39)
(過去ログ40)
(過去ログ41)
(過去ログ42)
(過去ログ43)
(過去ログ44)
(過去ログ45)
(過去ログ46)
(過去ログ47)
(過去ログ48)
(過去ログ49)
(過去ログ50)
(過去ログ51)
(過去ログ52)
(過去ログ53)
(過去ログ54)
(過去ログ55)
(過去ログ56)
(過去ログ57)
(過去ログ58)
(過去ログ59)
(過去ログ60)
(過去ログ61)
(過去ログ62)
(過去ログ63)
(過去ログ64)
(過去ログ65)
(過去ログ66)
(過去ログ67)
(過去ログ68)
(過去ログ69)
(過去ログ70)
(過去ログ71)
(過去ログ72)
(過去ログ73)
(過去ログ74)
(過去ログ75)
(過去ログ76)
(過去ログ77)
(過去ログ78)
(過去ログ79)
(過去ログ80)
(過去ログ81)
(過去ログ82)
(過去ログ83)
(過去ログ84)
(過去ログ85)
(過去ログ86)
(過去ログ87)
(過去ログ88)
(過去ログ89)
(過去ログ90)
(過去ログ91)
(過去ログ92)
(過去ログ93)
(過去ログ94)
(過去ログ95)
(過去ログ96)
(過去ログ97)
(過去ログ98)
(過去ログ99)
(過去ログ100)
(過去ログ101)
(過去ログ102)
(過去ログ103)
(過去ログ104)
(過去ログ105)
(過去ログ106)
(過去ログ107)
(過去ログ108)
(過去ログ109)
(過去ログ110)
(過去ログ111)
(過去ログ112)
(過去ログ113)
(過去ログ114)
(過去ログ115)
(過去ログ116)
(過去ログ117)
(過去ログ118)
(過去ログ119)
(過去ログ120)
(過去ログ121)
(過去ログ122)
(過去ログ123)
(過去ログ124)
(過去ログ125)
(過去ログ126)
(過去ログ127)
(過去ログ128)
(過去ログ129)
(過去ログ130)
(過去ログ131)
(過去ログ132)
(過去ログ133)
(過去ログ134)
(過去ログ135)
(過去ログ136)
(過去ログ137)
(過去ログ138)
(過去ログ139)
(過去ログ140)
(過去ログ141)
(過去ログ142)
(過去ログ143)
(過去ログ144)
(過去ログ145)
(過去ログ146)
(過去ログ147)
(過去ログ148)
(過去ログ149)
(過去ログ150)
(過去ログ151)
(過去ログ152)
(過去ログ153)
(過去ログ154)
(過去ログ155)
(過去ログ156)
(過去ログ157)
(過去ログ158)
(過去ログ159)
(過去ログ160)
(過去ログ161)
(過去ログ162)
(過去ログ163)
(過去ログ164)
(過去ログ165)
(過去ログ166)
(過去ログ167)
(過去ログ168)
(過去ログ169)
(過去ログ170)
(過去ログ171)
(過去ログ172)
(過去ログ173)
(過去ログ174)
(過去ログ175)
(過去ログ176)
(過去ログ177)
(過去ログ178)
(過去ログ179)
強調表示
/
ON
(自動リンクOFF)
結果表示件数
/
20件
30件
40件
50件
100件
記事No検索
/
ON
大文字と小文字を区別する
No.86754 の関連記事表示
ヒット / 9件
(1-9 を表示)
<<
0
>>
■86754
SQLServerでの漢数字→半角数字変換
□投稿者/ 大谷刑部 -
(2018/03/09(Fri) 23:13:42)
分類:[その他の言語]
DBがSQL-server(2016)で住所情報を扱うシステムの改修を担当してます。
〜マスタにSSISでDBにCSV、TSVから
(TSVに関しては本当はExcelですが、Excel用OLEDBプロバイダーがインストールされないためSSISの機能やT-SQLでExcelから直接Insertの手段が取れません)
bulk insert or 一括挿入タスクでマスタにインポートするフローを実装中です。
その際、ファイルの提供元により住所情報の丁目等の数字が、
全角数字だったり、漢数字だったりバラバラなので、マスタインポートのプロジェクト(パッケージ)内で半角数値に統一する処理が必要です。
後続処理の名寄せを丁目(大字)単位までで行う必要があるのと対照テーブルの既存レコードが半角数字で統一させる必要があるため、
要件的に必須の機能です。
イメージ的にはSSIS上、一旦、マスタにそのまま入れ、次のフローで一括Updateするイメージで実装しようと考えています。
全角数値については、あまりスマートとは言えませんが、
SQL-ServerのReplace関数が正規表現に対応していないようなので、
スカラ値関数で、
Whileで、文字コード対比で10回ループして、Replaceをかける関数をつくり、
SQLでスカラ値関数を呼ぶ方法でステップ数少なめにできる見込みですが、
漢数字の方が文字コードの順番が半角数字と異なるため、loopでステップ数を少なくできる見込みがありません。
以下のいずれの方法が適当でしょうか?
(1)横着せず、t-SQLでreplaceを10行書く
(2)SSISでカーソルに取得して、式タスクで何とかする
(3)スクリプトタスクでVB or C# + ADO.netでloopしながらstrconvで変換する
(4)その他:具体的にご教示いただければありがたく
制約条件としては、
保守フェーズ以降に私が関われる可能性が低く、
来年度以降の面倒を見るメンバーに、VBとかC#のスキルがありません。
したがって、できればSQLかT-SQLで何とかした方が都合が良いです。
よろしくお願いします。
親記事 /過去ログ149より /
関連記事表示
削除チェック/
■86755
Re[1]: SQLServerでの漢数字→半角数字変換
□投稿者/ shu -
(2018/03/10(Sat) 01:51:49)
■
No86754
(大谷刑部 さん) に返信
CLR関数を使ってみるのはどうでしょう?
CLR関数自体はVBとかC#で作成することになりますが
作ってしまえばあとの呼び出しは通常のSQL文での
記述とほとんど変わらず記述できまるのでなんとかなりませんでしょうか?
記事No.86754 のレス /過去ログ149より /
関連記事表示
削除チェック/
■86759
Re[2]: SQLServerでの漢数字→半角数字変換
□投稿者/ 大谷刑部 -
(2018/03/12(Mon) 11:49:57)
■
No86755
(shu さん) に返信
> ■
No86754
(大谷刑部 さん) に返信
>
> CLR関数を使ってみるのはどうでしょう?
> CLR関数自体はVBとかC#で作成することになりますが
> 作ってしまえばあとの呼び出しは通常のSQL文での
> 記述とほとんど変わらず記述できまるのでなんとかなりませんでしょうか?
SQL文のロジックのシンプルさから言えばその通りなのですが、
>>制約条件としては、
>>保守フェーズ以降に私が関われる可能性が低く、
>>来年度以降の面倒を見るメンバーに、VBとかC#のスキルがありません。
のところに引っかかります。
要するに、VBやC#の構文が理解できてない人に.Netの概念自体を理解させるのが難しいため
(次年度以降の面倒を見る人がそもそもプロのSEではありません。監査法人系のコンサルです)
有力な実装候補にはなり得ません。
せいぜいVBのソースが直接参照できる、スクリプトタスクのVBの実装なら理解できるかもという感じです。
記事No.86754 のレス /過去ログ149より /
関連記事表示
削除チェック/
■86771
Re[3]: SQLServerでの漢数字→半角数字変換
□投稿者/ トーマ -
(2018/03/14(Wed) 11:58:14)
■
No86759
(大谷刑部 さん) に返信
Excelでやればいんじゃね
記事No.86754 のレス /過去ログ149より /
関連記事表示
削除チェック/
■86756
Re[1]: SQLServerでの漢数字→半角数字変換
□投稿者/ WebSurfer -
(2018/03/10(Sat) 10:26:23)
■
No86754
(大谷刑部 さん) に返信
どういう条件で、どこまでやるかによって話がかなり違ってくると思うのですが?
多分、単純に「一二三・・・」を「123・・・」に変換すれば済むというような話で
はないと想像していますが・・・
どこまで対応するかによっては、結構悩ましい問題のようです。
漢数字を数字に直す処理
https://teratail.com/questions/66834
回答ではなくてすみません。
記事No.86754 のレス /過去ログ149より /
関連記事表示
削除チェック/
■86768
Re[2]: SQLServerでの漢数字→半角数字変換
□投稿者/ woow -
(2018/03/13(Tue) 15:17:41)
ボクも直接の回答ではなくスミマセン。
例えば、「3丁目16番20号」を略して書くと、「3-16-20」のような表記になりますが、
元データには厳密な記載と略記が混在していると思います。
「三丁目一六番二〇号」のようなデータの場合、
「3丁目16番20号」でOKなのか、「3-16-20」まで変換するのか、
どちらなんでしょう?
※恐らく、後者までやるとなると、その土地独特の表現があったりして
色々と大変かも知れません。
あと、「三丁目十六番二十号」のようなバリエーションにも対応が必要ですし、
番地を表す番号が3桁以上の場合(有り得る)を考えただけでゾッとします。
いずれにしろ、10回Replaceで対応できるような代物ではないです。
あと、関係ないかも知れませんが、
例えば、町名等に漢数字が含まれる場合(○○県△△市七日町一丁目二番三号)、
丁目・番地との区別は出来ているという前提でよいのですよね?
記事No.86754 のレス /過去ログ149より /
関連記事表示
削除チェック/
■86769
Re[3]: SQLServerでの漢数字→半角数字変換
□投稿者/ kaina -
(2018/03/13(Tue) 17:00:47)
同じく直接の回答ではありません。
どういうパターンがあるか興味があったので軽くググってみた所、
以下の住所正規化の製品ページが見つかりました。
http://biz.kkc.co.jp/software/geo/addressmatch/function/
このページにある通り、一筋縄で行くような話ではないですね。。。
挫けずに頑張るのであれば、上記ページに色々なパターンが書かれていますので
参考になるかと思います。
記事No.86754 のレス /過去ログ149より /
関連記事表示
削除チェック/
■86773
Re[4]: SQLServerでの漢数字→半角数字変換
□投稿者/ woow -
(2018/03/14(Wed) 12:58:15)
あと、こんな回答だと怒られるかもしれませんが、
筆まめのようなソフトでの一括変換を利用するのが賢いかも知れません。
CSV等の外部ファイルのインポート・エクスポートもできますし、
変換結果を出力したものでBULK INSERTするとか。
完全自動化が目的ではなく、プロのSE・PGが介入できないのであれば、
こういった方法も検討が必要と思います。
記事No.86754 のレス /過去ログ149より /
関連記事表示
削除チェック/
■86779
Re[5]: SQLServerでの漢数字→半角数字変換
□投稿者/ 大谷刑部 -
(2018/03/15(Thu) 08:49:03)
■
No86773
(woow さん) に返信
> あと、こんな回答だと怒られるかもしれませんが、
> 筆まめのようなソフトでの一括変換を利用するのが賢いかも知れません。
> CSV等の外部ファイルのインポート・エクスポートもできますし、
> 変換結果を出力したものでBULK INSERTするとか。
> 完全自動化が目的ではなく、プロのSE・PGが介入できないのであれば、
> こういった方法も検討が必要と思います。
別のお客さんでこの解決法を取っているところはありますね。
今回は予算の関係で追加のライセンス費用発生が無理なのでこの方法はなしです。
確かに皆さんのおっしゃる通り、汎用性のあるロジックを組もうとすると、
千くらいまでの対応が必要になり、どの技術で組もうが条件分岐がとてつもなく複雑になるので、
結論から言えば、十までの対応にしました。
今回の要件から言えば、インポート後のデータが大字迄で名寄せできれば良いので、
丁目の最大が40代であることを根拠に、大字ー字タイプの住所はイレギュラデータ扱いとし、
お客さん(エンドユーザー)に了解を取って十までの対応でスカラ関数で実装し、
インポートタスクの次にSQLタスクでupdateべた書きでスカラ関数戻り値で大字以降項目を更新の方針としました。
今現在はインポート本体フローの一括挿入タスクでドはまりしてます。
CSVの項目(複数ファイル想定)とテーブル項目項目数が異なるため、(更新日時、削除フラグ等)
所定のフォルダに配置したファイルに足りない項目数のカンマをスクリプトタスク(VB)で足し、
そのフローで、一括挿入タスクを実行してますが、
VBで容易に認識できているパスが認識できておらず異常終了します。
(ファイルが開けない、パスがいない的なメッセージが出てます)
改行コード、開始行の設定が問題ないことは確認してます。
ひょっとして、日本語デレクトリ名だとダメとか'でくくらないとだめとかでしょうか?
ついでで申し訳ございませんが、わかる方いれば、
ご教示いただければ助かります。
よろしくお願いします。
記事No.86754 のレス /過去ログ149より /
関連記事表示
削除チェック/
<<
0
>>
パスワード/
-
Child Tree
-