
前提・実現したいこと
c#を使ってsqliteを呼び出しています。
日本語を含んだ文字列の中から、19バイト目から16バイトを取得したいと思っています。
発生している問題・エラーメッセージ
ZNAKAには、「 東京 ジュース 0.5L」があるとします。 下記のSQL文だと「 東京」でパターンマッチング検索を行った後に19バイト目以降を取得したいのですが、「ース 0.5L」となってしまいます。 先頭から18バイトまでの間に日本語が含まれているためだと思うのですが、日本語を含んだ文字列の中で「ジュース 0.5L」を取得するには、どのようにしたらよいでしょうか。
該当のソースコード
SELECT SUBSTR(ZNAKA, 19, 16), SU FROM Zaiko WHERE ZNAKA LIKE (' 東京%') ;
試したこと
oracleにはSUBSTRBという機能があるようなのですが、sqliteには内容だというところマテは調べたところです。
補足情報(FW/ツールのバージョンなど)
NuGetを使って「System.Data.SQLite 1.0.111.0」を使用しています。
よろしくお願いいたします。

C# のタグが付いていますが、質問を見る限り SQLite の SELECT クエリの書き方の問題だけで、C# は関係ないように見えます。そうであれば C# のタグは外してください。
ご指摘、ありがりがとうございます。
修正いたしました。
そもそも半角文字は1バイトなんですか?
元々使っておられたのがDelphiで固定長、半角・全角で出力しているものというものでしたので、半角文字を1バイトとして考えています。半角19文字目という方がよろしいでしょうか。
SQLite内部の話です。仮にSQLite内部で2バイト扱いだったとしたら、どうしようもないですよね。
勉強不足ですみません。
SQLiteでどのように文字が扱わられるのかがわかっておりません。
どのように調べたらいいでしょうか。
hex(SUBSTR(ZNAKA, 19, 16)) でどんな出力になりますか?
ありがりがとうございます。
SELECT hex(SUBSTR(ZNAKA, 19, 16)), SU FROM Zaiko WHERE ZNAKA LIKE (' 東京%') ;
とした場合、
E383BCE382B9E38080302E354C
と返ってきました。

> E383BCE382B9E38080302E354C と返ってきました。
UTF-8 のようですね。それなのに「19バイト目から16バイト」とバイトで指定するのはどういう訳でしょう?

回答1件
あなたの回答
tips
プレビュー