[pgsql-jp: 34248] Re: 7.2.3から7.4.6 にバージョンアップした際にエラーになるSQLへの対応について
Takao Kato
sirius @ jp.fujitsu.com
2004年 11月 5日 (金) 11:41:55 JST
加藤@川崎です。
> ●postgres7.2.3では
> # select count(*) from table1 where col1='';
> count
> -------
> 0
> (1 row)
> #空文字列は0として評価されていた
>
> ●postgres7.4.6
> # select count(*) from table1 where col1='';
> ERROR: invalid input syntax for integer: ""
まぁ、数字(INT)なんですから空"文字列"と比較しても...って話があります。
どの本かは忘れましたが、
NULLはNULLであり、文字列の ''(空) とか数字の 0 ではない!
なんて名言もありますし。
本題に戻りますが、SQL書き換え禁止でしょうか? 書き換え可能なら
=> select 〜 from table1 where col1 is not null;
でこと足りるかと思いますが。書き換え禁止となると.....思いつきません。 _o_
PHP上で数字/文字列操作すると言う条件で、SQLの視点だけで見た場合にcol1
を「文字列」として扱ってしまえるのであれば方法がないわけではないです。
かな〜り力業になりますけど....
# もちろんフルバックアップとってからですよ ^^;
・根っ子から書き換える方法
1.pg_dumpall とかでバックアップをとる
2.書き換える
3.全部書き戻すなら =====> dropdb
一部テーブルだけなら => drop table
4.書き戻す
・ALTER TABLEで書き換える方法
1.ALTER TABLE で col1 => b_col1 に変更
2.ALTER TABLE で col1(CHAR/VARCHAR/TEXT)を追加
3.UPDATE で b_col1 の値を to_char で変換して col1 に挿入(コピー)
他のエレガント(!?)なやり方があるなら...知りたいです(汗)
ではでは
-------------------------------------------------------------
加藤@川崎
pgsql-jp メーリングリストの案内