Php 如何在ORACLE中以Y-m-d H:i:s格式保存日期?
在PHP中,Php 如何在ORACLE中以Y-m-d H:i:s格式保存日期?,php,oracle,to-date,Php,Oracle,To Date,在PHP中,date('Y-m-dh:i:s')给出的结果类似于'2017-02-17 23:10:00'格式 现在,我想将结果保存在ORACLE 10g中。我正在使用Oracle 10g Xpress Edition 现在,我正试图像这样保存数据 $sql = "INSERT INTO tbl_language VALUES (1, 'Hindi', TO_DATE('".$time."','yyyy-mm-dd hh24:mi:ss'))"; 其中,$time=date('Y-m-dh
date('Y-m-dh:i:s')
给出的结果类似于'2017-02-17 23:10:00'
格式
现在,我想将结果保存在ORACLE 10g中。我正在使用Oracle 10g Xpress Edition
现在,我正试图像这样保存数据
$sql = "INSERT INTO tbl_language VALUES
(1, 'Hindi', TO_DATE('".$time."','yyyy-mm-dd hh24:mi:ss'))";
其中,$time=date('Y-m-dh:i:s')代码>
日期值将保存为2017年2月12日<代码>中的日期。
如何获取以所需格式保存的日期数据?如果只选择日期列,Oracle不会显示时间组件
试试这个:
select l.*,
to_char(datecol, 'YYYY-MM-DD HH24:MI:SS')
from tbl_languages l;
Oracle中的日期不会保存为2017-02-17 23:10:00或2017年2月12日或您认为的任何其他格式。它的存储方式完全不同。从数据库中选择日期时,显示日期的格式基于会话的NLS\u date\u格式设置
如果您想以特定格式获取日期,可以使用to_CHAR
函数,使用所需格式:
select to_char(datecolumn, 'yyyy-mm-dd hh24:mi:ss') from your_table;
日期
数据类型没有格式;Oracle将其存储为其中之一,直到将其传递给客户机程序(即SQL/Plus、SQL Developer、Toad、Java、Python等),并且该客户机程序根据其拥有的任何规则对其进行格式化,日期才会获得格式
如果您使用的是SQL/Plus或SQL Developer,那么它将使用NLS\u DATE\u FORMAT
session参数格式化日期。使用:
(请注意,这只会更改当前会话中的格式,不会更改任何其他会话/用户的格式。)
如果你想给日期一个特定的格式,那么你需要
$time包含字符串“2017-02-17 23:10:00”,但它在Oracle中保存为2017年2月12日?这是打字错误还是真的改天了?@ThorstenKettner。我认为2017年2月12日只是Oracle显示日期的默认方式。@Gordon。。不。我认为它是基于会话的NLS设置的。@Gordon Linoff:无论如何,当试图保存2月17日时,它不应存储为2月12日。我强烈怀疑$time
的值不是您所认为的值。让我们了解一下——当你认为你在一个广泛使用的软件的基本功能中发现了一个bug时,你可能是正确的——但是这个bug很可能是在你对正在发生的事情的理解中,而不是在软件中。鉴于今天是2017年2月12日,我认为您必须考虑到$time
的值可能是2017年2月12日
。这意味着什么?当您只选择日期时,Oracle不显示时间组件?这取决于会话的NLS\u DATE\u格式
,不是吗?似乎OP需要'yyyy-mm-dd'
(特别是,不是Mon
,还有顺序);否则这就是正确答案。有趣。Java/Python是否正确?我总是假设(我不知道这两种语言中的任何一种)它们有某种date
数据类型,Oracle不会向它们传递字符串,除非字符串数据类型中有请求。这与SQL*Plus和Toad不同,后者只理解字符串。在Java中,Oracle JDBC驱动程序将在一个类中存储一个Oracle日期——这只是一个表示Oracle在数据库内部使用的二进制格式的类。如果您想向用户显示,那么它不会显示字节,它将使用toString
方法(或用户调用的其他类似方法)以用户能够理解的方式格式化日期。SQL*Plus和Toad是一样的——Oracle只传递7个字节,并将其留给其他人格式化,以便用户能够理解。
SELECT TO_CHAR( date_column, 'YYYY-MM-DD HH24:MI:SS' ) AS formatted_date
FROM tbl_language;