他SQLDBから取り込んだ場合のフィールドタイプの変換ルールについて

ODBC経由で取り込んでみたのですが、
型が一致しない場合になんらかの暗黙のルールで変換される場合と変換されない場合があるのですが
また取り込んだ後に、4D側のフィールドの型を変更した場合にも変換される時と変換されない時があります。

ルールはどのドキュメントに書いてありますでしょうか。

具体的には、文字列で"1"と"0"しか入っていない場合に、これを数値型、ブール型に変換したいと考えています。
その逆もあります。

私が知る限り,ドキュメントに記述があるのは,下記のページで,

https://doc.4d.com/4Dv17/4D/17/4D-SQL-engine-implementation.300-3786651.ja.html

数値タイプ間の自動変換が実装されています。
数値を表す文字列は対応する数値に変換されません。
CAST関数を使用して、タイプ間の変換を行うことができます。

と簡単に述べられています。

また,NULLについても触れられています。

4Dのフィールドタイプを変更したときの「変換」は別問題で,
これは,各レコードに「マイクロストラクチャ」と呼ばれるヘッダー情報が存在し,
値を保存した時点でのフィールドタイプが値と一緒に保存されていること,
したがってフィールドを再登録するまでは,当時の値がそのまま残っていることが関係しています。

たとえば,
ブールを登録後,
フィールドタイプを数値に変更した場合,
表示される値は 1 と 0 になり,
フィールドタイプを文字に変更した場合,
表示される値は “true” と “false” になりますが,
実際にフィールドの中身が変換されているわけではありません。

値の解釈(表示方法)がカレントのフィールドタイプに合わされているだけです。

インポートしたデータを変換されるのであれば,
(実数⇄整数,任意→文字の場合を除き)
トリガなどの明示的な変換が必要になるかと思います。

ODBCからの取得はちゃんと明実的にCASTした方がいいと言うことですね。

フィールドタイプの変更は、内部的にはそのままなんですね。
変更後すぐ検索してみたらちゃんと動作している様に見えたのでどうなのかと思ったのですが
ちゃんと実データの更新処理を行わないといけないと言う事ですか。

古い形式のままのデータを取得することはできないですよね。 :frowning: