Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在ORACLE中以Y-m-d H:i:s格式保存日期?_Php_Oracle_To Date - Fatal编程技术网

Php 如何在ORACLE中以Y-m-d H:i:s格式保存日期?

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

在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: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;