- ベストアンサー
【SQLServer】UNICODEから文字への変換について
SQLServer2005を利用しています。 半角→全角変換の関数を作成するために、一度unicode関数を使用したいと考えています。 が、UNICODEから文字への変換方法がわからず困っています。 文字からunicodeへは、UNICODE関数があるのですが、逆はないのでしょうか? 一方通行にしか変換できないのでしょうか? ご存知の方よろしくおねがいします。
- mamiyak
- お礼率89% (89/100)
- SQL Server
- 回答数7
- ありがとう数16
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>SQLSERVER2005インストールすると.NET FRAMEWORKもインストールされたような気がするのですが、勘違いでしょうか。 勘違いではないですよ。 だから「CLRの使えないSQL Server 2005は存在しない」です(有効にさえすれば)。 VS2005がないとコンパイルと配置が面倒なだけですが、できないわけではなく、やり方はもう載せておられる通りです(自習書もあります)。
その他の回答 (6)
- nora1962
- ベストアンサー率60% (431/717)
> 今回のシステムでは.NETは実行環境に入っていませんので > 無理なのです。。。 SQLSERVER2005インストールすると.NET FRAMEWORKもインストールされた ような気がするのですが、勘違いでしょうか。
お礼
そうだったんですか、知りませんでした。 有効になっているかどうか確認してみます。 ありがとうございました。
- jamshid6
- ベストアンサー率88% (591/669)
#1です。 UNICODE関数と全角変換に何の関係があるのだろうと思いましたが、そういうことですか。 一応答えを書いておきます。 SELECT NCHAR(UNICODE('あ')),CHAR(ASCII('A')) ただ、コード変換する意味は今回のケースではないでしょうね。 私も他の方のアドバイスの通り、CLRを使うことをお勧めします。 総当たりでの変換モジュールはとにかく遅いし、照合順序がJapanese_CI_ASだった日にはCOLLATEも指定しないといけなくて、さらに遅くなるしで、たぶん実用には耐えないでしょう。 私のところでも逆に半角変換の処理にはCLRを使っています。アセンブリはセーフで配置できるので、開発ポリシーに抵触しない限りはCLRの使用を認めてもらった方がいいでしょう。
お礼
そうなんです。。 サーバーの設定がJapanese_CI_ASだったため COLLATEも必要なんです。。。 COLLATE指定するとさらに遅くなるのですね。 知りませんでした。 勉強になります。ありがとうございました。
- nora1962
- ベストアンサー率60% (431/717)
MS SQLSERVERにはOracleと違ってTRANSLATE関数がないんです。 ユーザー関数作るにしてもループで回して、半角文字総当りで検索掛けると いう力技しか思いつきません。 今回のようなケース(CLR側のロジックが単純)ではCLRを利用してもいいの ではないかなと思います。データベースごとにアセンブリ配置する手間が 生じますが。
お礼
>TRANSLATE関数 確かにないです。 どうしてもORACLEに慣れてしまっているので最初に探したのですが 無かったです。 ご回答ありがとうございました。
- nora1962
- ベストアンサー率60% (431/717)
以下の内容のSqlClrStrConv.vbをc:\tmpに作成します。 Imports System Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlTypes Imports Microsoft.SqlServer.Server Public Class SQLCLR <Microsoft.SqlServer.Server.SqlFunction()> _ Public Shared Function SqlStrConv(ByVal str As SqlString, ByVal mode As SqlInt32) As SqlString Return StrConv(str.ToString, mode) End Function End Class コンパイルします。 c:\tmp>vbc vbc /out:SqlClrStrConv.dll /t:library /r:"C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlaccess.dll" SqlClrStrConv.vb sqlcmdかクエリアナライザで以下のコマンドを実行します。 USE [pubs] GO create ASSEMBLY [SqlClrStrConv] FROM 'C:\tmp\SqlClrStrConv.dll' WITH PERMISSION_SET = SAFE GO create function SqlStrConv( @str nvarchar(max),@conversion int ) returns nvarchar(max) as external name SqlClrStrConv.SQLCLR.SqlStrConv go これで select cast( dbo.SqlStrConv('abc',4) as nvarchar(10) ) go で全角に変換できます。
お礼
ご回答ありがとうございます。 CLRを利用すれば確かにできそうですね。 T-SQLのみでの実現は不可能でしょうか? 一応、いまのところベタベタに変換しています。 Set @VarConvValues = Case @VarConvValues -- ア行 When 'ア' Then 'ア' When 'イ' Then 'イ' When 'ウ' Then 'ウ' When 'エ' Then 'エ' When 'オ' Then 'オ' ・・・ ・・・ のような感じです。
- nora1962
- ベストアンサー率60% (431/717)
MS SQLSERVER のBINNディレクトリに「sqlaccess.dll」があれば、SQLCLR 機能を利用して.NETのStrConv関数を呼び出せませんか。
お礼
ありがとうございます。 今回のシステムでは.NETは実行環境に入っていませんので 無理なのです。。。
- jamshid6
- ベストアンサー率88% (591/669)
全角変換のためにUNICODE関数を使うのはなぜですか?
補足
変換するために一度コードに変換し、マップに基づいて変換しようと考えました。 文字→コードへの変換関数についてはASCIIとUNICODEがありましたが ASCIIについては全角文字のコードが用意されていないため UNICODEを使用することにしました。 文字→コードへの変換はできるのですが、 コード→文字の方法が分からなかったため質問させていただきました。
関連するQ&A
- 半角文字の一括変換
EXCELで半角入力されている文字を一括で全角に変換したり、逆に全角を半角に一括変換する方法はありますか? 何か手頃なフリーソフトなどご存知ありませんか?
- 締切済み
- Windows XP
- 文字変換にかんしまして。
windows のwordを使っています。 文字の全角から半角への変換に困っています。 パソコンに搭載されていた電子マニュアルを見てもよくわからなかったので質問させていただきました。 たとえばENGLISHと入力する時に、(直接入力というのでしょうか?)ENGLISH(本当は小文字がいいです)と入力すると、全角で入力されてしまいます。このときENGLISHの下には点線の下線があるので半角に変換しようとして、スペースキーを押すのですが、スペースが入力されてしまいます。文書を作成している時に、よく半角の英文字で表したい文字があるので変換がすべて全角になると困ってしまいます。 こうではなく、全角から半角へスムーズに変換できる設定方法を、どなたかご存知ありませんか?
- ベストアンサー
- Windows XP
- StrConvでUnicodeに変換出来ない文字
エクセルのVBAで、StrConv関数を使用して、文字列をUnicodeに変換しようとしているのですが、特定の文字が変換できません。 解決方法をご存知の方は教えてください。 現象:StrConv("マミムメモ",vbUnicode)で変換すると、ムメモが文字化けしてしまう。 確認方法: MsgBox StrConv(StrConv(InputBox("入力"), vbUnicode), vbFromUnicode) で、InputBoxに"マミムメモ"を入力すると、メッセージボックスに"マミ???"と表示されてしまう。
- ベストアンサー
- Visual Basic
- CIDコードからUNICODEへの変換???
.NETのC++でプログラムを作っています 外部から文字列が渡されますが、この文字列はCIDコードです これをUNICODEに変換して使用したいのですが、その方法が分かりません 『 CID UNICODE 変換 』をキーワードにして検索しましたが適当な資料に出会えません C++から呼べる変換関数などをご存知でしたらご指導お願い申し上げます 宜しくお願い致します
- ベストアンサー
- C・C++・C#
- ワード2007で記号や特殊文字を全角変換したい
ワード2007を使用していますが、記号や特殊文字を「その他の記号」から挿入するのですが半角で入力されます。 全角に変換しなおしたいのですがどうすればいいでしょうか! たとえば前行の!ですが簡単に全角に変換できないでしょうか? 逆に全角から半角に変換できないでしょうか? マイクロソフトオフィス2007の問題なのでしょうか?
- 締切済み
- Windows Vista
- ワードの特殊文字【シーベルト】のユニコード変換
word2003 の「記号と特殊文字」の中に、 パーセントやミリなどの表記と同じで【シーベルト】の特殊文字があったので、 それをユニコード変換してhtml上に表記させたいのですが、 どうしてもできません。 ユニコード変換するときはいつも↓ここを利用しているのですが、 http://code.cside.com/3rdpage/jp/unicode/converter.html wordからペーストすると□になってしまい、変換できない。 仕事上で利用したいので、 わかる方、教えて頂ければ幸いです。 もし、出来ない場合はなぜできないのかも教えて頂ければ助かります。 よろしくお願いします。
- ベストアンサー
- Windows XP
- Unicodeは使うべきなのでしょうか?
※いまいち文字コードの事が良くわかっていない者です。 今まで、半角1バイト 全角2バイトでプログラミングして来ました。 しかし最近Unicodeの存在に興味や疑問や怖さが募っています。 ■質問1 ・半角1バイト 全角2バイトという扱いは 将来的に廃止され締め出されてしまう危険などが有るのでしょうか? ■質問2 ・ブラウザ/一部チャットのように多言語同時表示は 文字数分大量の無駄なデータ送信負荷になってないのでしょうか? 時に1文字6バイトにすらなるとも聞くだけに疑問です。 ■質問3 ・Unicodeだと、半角1バイト 全角2バイトの扱いに比べ 保存も管理も通信も、無駄が増えるだけにも思えてしますます。 Unicodeをプログラマーの皆さんはどう認識し使ったり使い分け しているのでしょうか? 漠然とした質問で申し訳ないですが、 何かご助言を頂けますと幸いです。
- ベストアンサー
- C・C++・C#
- Vbscript Unicode文字の判定
今、テキストファイルがあり、その中には「Unicode文字」が含まれています。 タックシール(ダイレクトメール用)に出力するのに、マンション名やビル名は改行しなければなりません。 1行に印字できる文字数は全角で20文字(40バイト)です。 したがって、「住所1」と「住所2(マンションやビル名)」の正確なバイト数を調べるのですが、今、「Unicode」のテキストファイルを作って、確かめたところ、半角文字は、そのまま「Asc()」で正の整数で返ってきます。 また、通常の2バイト文字(全角スペースから外字の最終文字)までは、負の整数で返ってきました。 しかし、「Unicode」文字は、常に「63」で返ってきます。 Character Code「63」は、半角の「?」です。 どうやら、「VBScript」は「Unicode」文字をすべて「?」として認識してしまうようです。 通常は、住所に「?」はないはずなのですが、最近、お客様のデータを見ていると、半角の「-」が、よく、半角の「?」に化けているので、「?」はちゃんと1バイトとして、Unicodeの文字は2バイトとして調べなければなりません。 VBAのように「Len()」と「LenB()」があれば、問題ないのですが、「VBScript」では、正しく動作しません(すべて「2」と返してきます)。 正確に文字数(バイト数)を調べるには、どうすればよいのでしょうか?
- 締切済み
- その他(ソフトウェア)
- Borland C++ Builder で全角文字を半角文字に変換したい
ヘルプには大文字を小文字に変換する関数は書いてあるのですが、全角文字を半角にする関数は書いてなくて困っています。 _mbctombb()と言う関数を使えば良いのかなと思い、使ってみましたが、うまく使うことが出来ません。 どなたか教えて下さい。宜しくお願いします。
- ベストアンサー
- C・C++・C#
お礼
なるほど。わかりました。 自習書の存在を初めて知りました。いろいろありますね。 有用な情報をいただきありがとうございました。 活用させていただきたいと思います。 CLRについては今後も継続的に使用していくことも視野に含めて サーバー管理者やお客さんと調整してみたいと思います。