[データベース比較]部分文字列取得SUBSTRの罠

RDBMSには大抵、部分文字列取得用にSUBSTR関数があります。

使い方は

SUBSTR([文字列],[開始インデックス],[切り出す文字数])

ですが、[開始インデックス]が0のときに注意が必要です。

開始インデックスが「1」のときはいいとして

SELECT SUBSTR('ABCDE',1,3) -> 'ABC'

0のときはデータベースで振る舞いが違います。

・Oracle : SELECT SUBSTR('ABCDE',0,3) FROM DUAL -> 'ABC'
(インデックス「1」の場合と同じ動作)

・MySQL : SELECT SUBSTR('ABCDE',0,3) -> ''
(空の文字列が取得される)

・PostgreSQL : SELECT SUBSTR('ABCDE',0,3) -> 'AB'
(前1文字分が削られる)

うっかりすると移行のときなんかに大変そうですね…

posted by へっぽ at 00:36 | TrackBack(0) | DB - その他 | このブログの読者になる | 更新情報をチェックする

[Oracle][PostgreSQL]Date型の違い

OracleとPostgreSQL、同じDate型でもその違いについて。


Oracleは年月日時分秒まで持ちますが、PostgreSQLは年月日までです。


以下検証。


1. CREATE TABLE SAMPLE (d DATE);


2. (PostgreSQLで) : INSERT INTO SAMPLE VALUES(NOW());

  (Oracleで) : INSERT INTO SAMPLE VALUES(SYSDATE);


3. SELECT TO_CHAR(d, ‘YYYY-MM-DD HH24:MI:SS’) FROM SAMPLE;


結果:

■PostgreSQL

    2010-04-27 00:00:00

■Oracle

    2010-04-27 10:26:29


PostgreSQLは時刻部分は0になってしまいますね。


ちなみに検証に使用したバージョンは

Oracle :10gR2
PostgreSQL:8.4.2

でした。

posted by へっぽ at 23:06 | TrackBack(0) | DB - その他 | このブログの読者になる | 更新情報をチェックする

[Oracle 10g] テーブルのインポート/エクスポート



テーブルのインポート

1. テーブルから丸ごと作る場合

$imp [ユーザー]/[パスワード] file=[ファイルのフルパス] log=[ログのフルパス] FULL=Y

2. テーブルが存在していて、定義だけ入れたい場合

$imp [ユーザー]/[パスワード] file=[ファイルのフルパス] log=[ログのフルパス] fromuser=〜 touser=… ignore=y


テーブルのエクスポート

1. テーブルを指定してエクスポートする場合

$exp [ユーザー]/[パスワード] file=[ファイルのフルパス] log=[ログのフルパス] tables=(table1,table2,…)



posted by へっぽ at 00:40 | TrackBack(0) | DB - その他 | このブログの読者になる | 更新情報をチェックする

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。