アクセスカウンタ

zoom RSS テーマ「php」のブログ記事

みんなの「php」ブログ


桁数の多い数値を取得する[php,Oracle,SQL*Plus]

2010/01/20 23:12
DBから13桁の数値を取得して、PHPで表示しようとした際に
なぜか全く関係のない「2147483647」という数値がずらりと表示されました。

原因はPHPのinteger型の最大値以上の数値を取得しようとしていたためでした。


解決策として、以下のようにSQLで文字列として取得しました。
(表示するだけだったので..)
SQL> SELECT TO_CHAR(1234567890123) FROM DUAL;



これに関連して。
SQL*Plusでは、NUMBER型の列の表示文字数は
デフォルトで10桁となっています。
10桁以上の数値の場合は指数表記となります。

SQL> SELECT 1234567890123 FROM DUAL;

1234567890123
-------------
1.2346E+12


これを指数表記にしたくない時はNUMWIDTHを変更します。

SQL> SHOW NUMWIDTH
numwidth 10
SQL> SET NUMWIDTH 13
SQL> SELECT 1234567890123 FROM DUAL;

1234567890123
-------------
1234567890123


ちなみにNUMWIDTHの範囲は2から50までで
NUMBER型の桁数が一括で変更されるようです。


参考:SQL*Plusオプション一覧

記事へトラックバック / コメント


if文の条件で困った

2008/06/06 20:14
↓こういうxmlをプログラムで書き出して

<aaa>
<bbb>1</bbb>
</aaa>


xmlの<bbb>タグ中身を test という変数にして

if(test == "0") {
○○○○
} else if(test == "1") {
△△△△
} else {
□□□□
}


っていうif文を書いたときに、xmlタグの中身が1なのに□□□□が実行されるという挙動で悩まされました。

原因はxmlタグの中に改行が入っていたせいで、0でも1でもないよーってことだったようです。
そこで、

indexOf();

という関数を教えていただき、それで回避しました。



使い方
[検索対象の文字].indexOf([検索する文字],[検索開始位置]) ;


検索対象の文字列に検索する文字が含まれてたらその開始位置を、
含まれていなかったら-1を返します。

これで直りました!



if(test.indexOf("0") != -1){
○○○○
} else if(test.indexOf("1") != -1) {
△△△△
}



xmlは侮れない・・
記事へトラックバック / コメント


文字列を分解する [ php ] 

2008/04/28 22:56
phpでカンマとかスペース、ハイフンなど、どこかで文字列を区切りたいときはexplode関数を使うと便利みたいです。


使い方 :
配列変数 = explode(ここに指定した文字で分解, 分解する文字列, 分解する回数);



ある案件で、「1111-aaaa-222-bbb-333-cc」のような形式の文字列を、ハイフン区切りで上位3つにするというのがあったので、これを使ってみました。

$ex = explode("-", "1111-aaaa-222-bbb-333-cc", 4);

とすると、$exの値は、
1111
aaaa
222
bbb-333-cc
という風に4つに分解され、最後の配列に文字列の残りすべてが入ります。
で、

$data = $ex[0]."-".$ex[1]."-".$ex[2];

という感じでくっつけなおして、ハイフン区切りで上位3つを取得することが出来ました。
もっといい方法あるかな?
記事へトラックバック / コメント


トップへ | みんなの「php」ブログ

molog phpのテーマ/BIGLOBEウェブリブログ
文字サイズ:       閉じる