2017-02-12 8 views
2

PHPの場合、date('Y-m-d H:i:s')'2017-02-17 23:10:00'のような結果を返します。オラクルの日付をY-m-dに保存する方法H:i:s形式?

ここで結果をORACLE 10gに保存します。私はOracle 10g Xpress Editionを使用しています。

今、このようなデータを保存しようとしています。

$time = date('Y-m-d H:i:s');

日付値が12-Feb-17として救われ

$sql = "INSERT INTO tbl_language VALUES 
(1, 'Hindi', TO_DATE('".$time."','yyyy-mm-dd hh24:mi:ss'))"; 

。 希望のフォームに保存された日付データを取得するにはどうすればよいですか?

+0

$ timeには '2017-02-17 23:10:00'という文字列が含まれていますが、12月2日にOracleに保存されますか?これはタイプミスですか、これは本当に別の日ですか? –

+0

@ThorstenKettner。 。 。私は、2月12日がOracleが日付を表示するデフォルトの方法だと思います。 –

+1

@Gordon ..いいえ、セッションのNLS設定に基づいていると思います。 – GurV

答えて

0

日付列を選択するだけでは、Oracleに時間コンポーネントは表示されません。

はこれを試してみてください:Oracleで

select l.*, 
     to_char(datecol, 'YYYY-MM-DD HH24:MI:SS') 
from tbl_languages l; 
+0

それはどういう意味ですか? *日付を選択するだけで、Oracleは時間コンポーネント*を表示しません。それはセッションの 'NLS_DATE_FORMAT'に依存します。 – mathguy

3

日は2017年2月17日午後11時10分00秒または12 2月-17または他のどんなフォーマットあなたが考えるとして保存されていません。それはまったく別の方法で保存されています。データベースから日付を選択すると、日付が表示される形式は、セッションのNLS_DATE_FORMAT設定に基づいています。あなたが特定の形式で日付を取得したい場合は

、あなたが必要な形式でTO_CHAR機能を使用することができます。DATEデータ型は形式を持っていない

select to_char(datecolumn, 'yyyy-mm-dd hh24:mi:ss') from your_table; 
+0

OPは「yyyy-mm-dd」(特に、「Mon」よりもむしろ順序)を望んでいたようです。それ以外の場合は正しい答えです。 – mathguy

0

。 Oracleはこれを7- or 8-bytesのいずれかとして保存します。クライアント・プログラム(SQL/Plus、SQL Developer、Toad、Java、Pythonなど)に渡され、クライアント・プログラムは日付形式を取得します。

SQL/PlusまたはSQL Developerを使用している場合は、NLS_DATE_FORMATセッションパラメータを使用して日付をフォーマットします。

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

(これは現在のセッションのみにフォーマットを変更し、任意の他のセッション/ユーザーのためにそれを変更しないことに注意してください。)

をあなたが与えたい場合:使用してYou can change this日付は特定のフォーマットconvert it to a stringする必要があります。

SELECT TO_CHAR(date_column, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date 
FROM tbl_language; 
+0

興味深い。 Java/Pythonについては正しいですか?私はいつも「date」データ型を持っていると仮定しています(これらの言語のいずれかがわかりません)。文字列データ型で要求されない限り、Oracleは文字列を渡しません。これは、文字列のみを理解するSQL \ * PlusおよびToadとは異なります。 – mathguy

+0

Javaでは、Oracle JDBCドライバはOracleの日付を[oracle.sql.DATE'](https://docs.oracle.com/)に格納します。データベース/ 121/JAJDB/oracle/sql/DATE.html)クラス - これはOracleがデータベースに内部的に使用するバイナリ形式を表すクラスです。それをユーザに表示したい場合は、バイトを表示せず、 'toString'メソッド(またはユーザが呼び出す他の同様のメソッド)を使用して、ユーザが理解できるように日付をフォーマットします。 SQL * PlusとToadは同じです - Oracleはちょうど7バイトを渡し、ユーザーが理解できるようにフォーマットするために別のものに置きます。 – MT0

関連する問題