我在CREATED
下使用select sysdate from dual
將數據存儲在數據庫中,它將存儲值9/12/2012 9:26:05 AM
這正是我想要的。來自Oracle數據庫的PHP格式日期
然而,當我檢索與PHP的信息(例如$query[0]['CREATED']
)返回12-SEP-12
我怎樣才能避免這種情況?
我在CREATED
下使用select sysdate from dual
將數據存儲在數據庫中,它將存儲值9/12/2012 9:26:05 AM
這正是我想要的。來自Oracle數據庫的PHP格式日期
然而,當我檢索與PHP的信息(例如$query[0]['CREATED']
)返回12-SEP-12
我怎樣才能避免這種情況?
當您檢索一個日期,它已經從一個點在時間的抽象表示轉換爲字符的字符串。如果沒有指定格式,它將使用一個默認(通常NLS_DATE_FORMAT
):
SQL> select sysdate from dual;
SYSDATE
---------
12-SEP-12
如果你想要一個特定的格式,你必須使用轉換函數,如TO_CHAR
:
SQL> SELECT to_char(sysdate, 'dd/mm/yyyy hh:mi:ss am') dt FROM DUAL;
DT
----------------------
12/09/2012 04:25:04 pm
只是爲了保持完整性,你可以有你的連接建立之初,以便從那個時候起的日期以特定的格式總是檢索,就像這樣:
// Typical connection boilerplate
$conn_string = $config['engine'] . ':host=' . $config['host'] . ';port=' . $config['port'] . ';dbname=' . $config['dbname'] . ';charset=utf8';
$db = new PDO($conn_string,
$config['username'],
$config['password']
);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// This is where you prepare your session
// For your case, the format should be 'dd/mm/yyyy hh:mi:ss am' as stated on the previous answers
$db->query("ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI:SS'");
通過這種方式,您可以執行常規的SELECT *
,而不用擔心每次都會遇到特定DATE
列的格式。
與SYSDATE和類型與DD-MM-YYYY轉換將返回12-09-2012
:
select field name, TO_CHAR(sysdate, 'DD-MM-YYYY') AS sysdate from database name;
謝謝,這正是我所需要的。 – user1193752