Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
Sql 最新问题_Sql_Oracle_To Date - Fatal编程技术网

Sql 最新问题

Sql 最新问题,sql,oracle,to-date,Sql,Oracle,To Date,我的SQLWHERE子句中包含以下内容。这是针对Oracle数据库运行的。sc_dt字段在数据库中定义为日期字段 sc_dt = TO_DATE('2011-11-03 00:00:00.0', 'YYYY-MM-DD') 产生以下错误“日期格式图片在转换整个输入字符串之前结束” 当我尝试用以下公式解释小数秒(.0在本例中)时,我得到了以下错误 sc_dt = TO_DATE('2011-11-03 00:00:00.0', 'YYYY-MM-DD HH24:MI:SS.FF') 产生以下错

我的SQLWHERE子句中包含以下内容。这是针对Oracle数据库运行的。
sc_dt
字段在数据库中定义为日期字段

sc_dt = TO_DATE('2011-11-03 00:00:00.0', 'YYYY-MM-DD')
产生以下错误“日期格式图片在转换整个输入字符串之前结束”

当我尝试用以下公式解释小数秒(
.0
在本例中)时,我得到了以下错误

sc_dt = TO_DATE('2011-11-03 00:00:00.0', 'YYYY-MM-DD HH24:MI:SS.FF')
产生以下错误“无法识别日期格式”

我只是假设我需要
.FF
来解释“from”字符串中的
.0
。我也尝试过
.FF1
.FF2
,…,
.FF9
,也得到了同样的结果(此时我正在抓救命稻草)

就我所见,
sc_dt
字段总是填充月/日/年部分(而不是小时/分钟/秒部分)

我正在调试一个java程序,该程序正在执行上述SQL语句,并带有
2011-11-03 00:00:00.0


我该如何解决这个问题呢?

src\u dt=
从dual中选择截止日期('2011-11-03 00:00:01.1','YYYY-MM-DD HH24:MI:SS.sss')


如果您只需要一个日期输出,我想上面的方法应该可以使用。

您需要使用午夜后秒选项。比如:

select TO_DATE('2011-11-03 00:00:01.1', 'YYYY-MM-DD HH24:MI:SS.SSSSS') from dual
或者这个:

select TO_TIMESTAMP('2011-11-03 00:00:00.1', 'YYYY-MM-DD HH24:MI:SS.FF') from dual

Oracle的
DATE
列(如
sc_dt
)总是包含一天和一个时间部分,一直到第二天。根据您的查询工具及其配置方式(通常是会话的
NLS\u DATE\u格式
),默认情况下可能不会显示时间组件。但是,您可以通过对字符执行显式的
TO\u CHAR

SELECT to_char( sc_dt, 'YYYY-MM-DD HH24:MI:SS' ) 
  FROM table_name
由于
日期
仅将时间存储到秒,因此不能在格式掩码中使用小数秒。因此,您需要执行类似的操作来提取字符串的部分,直到小数秒。如果不能保证字符串始终位于小数点前19个字符,则可以使用
INSTR
查找小数点,并获取小数点之前的所有内容

TO_DATE( substr('2011-11-03 00:00:00.0', 1, 19), 'YYYY-MM-DD HH24:MI:SS')

但是,由于这来自Java应用程序,因此最好使用正确的数据类型。如果在准备好的语句上使用
setDate
方法绑定Java日期(Java.sql.date),而不是绑定字符串,那么就不必处理sql语句中的字符串格式

我知道这条线已经有一年多了,但是。。。 另一种选择可能是:

src_dt=select TO_DATE('2011-11-03 00:00:01.1234', 'YYYY-MM-DD HH24:MI:SS.?????') from dual;
注意:这里有一个额外的“?”来说明你甚至可以加入几个额外的“?”。如果由“?”表示的数字在源时间字符串中没有任何对应字符,则Oracle不会对此提出投诉。如果您不确定接收到的秒数的精度,这可能会有所帮助

此选项为源时间的“分数秒”格式提供了一些灵活性。 我不知道这实际上在任何地方都有记录。

我这样做了:

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


--Change the decimal
ALTER SESSION 
SET NLS_NUMERIC_CHARACTERS = ',.';

这对我来说很管用

你,善良的先生,洛克。我几个小时前就该问这个问题了!(一旦堆栈溢出,我就会接受这个答案)。非常感谢!是的,.FF将只在TO_TIMESTAMP函数上工作,而不是在TO_DATE上工作。请注意,TO_DATE调用仅在字符串中标识小数秒的部分恰好也是自午夜起的秒数(每小时可能只发生9次)时才工作。如果你的时间总是在午夜,那可能不是问题。但一般来说,您将得到
ORA-01838:seconds of minute与seconds in day冲突
错误。而
TO_TIMESTAMP
调用可能会导致性能问题,如果它强制执行隐式强制转换,从而阻止使用索引。没有sir。只需将第一个示例更改为'00:00:01.2'(any!=1而不是2)并查看失败。此to_DATE调用仅在字符串中标识小数秒的部分恰好也是自午夜起的秒数(每小时可能只发生9次)时才有效。如果你的时间总是在午夜,那可能不是问题。但总的来说,你会得到ORA-01838:seconds of minute与seconds in day的错误冲突。我喜欢Justin使用
SUBSTR
的解决方案,比其他使用
.ssssss
格式模型的解决方案更好,这两个原因都是他在对其他答案的评论中给出的,因为更清楚的是,时间的分数秒部分被丢弃了。@Justin-谢谢你的解释!这有助于我理解为什么要这么做。@Justin:不使用setDate的一个原因是Java和数据库之间发生的隐式时区转换。@kevincline-我不确定我是否理解。Oracle
日期
没有关联的时区。一个Java.sql.Date就可以了。
PreparedStatement
类的
setDate
方法使用JVM的默认时区或传入的
日历中指定的时区将Java日期转换为Oracle日期。无论哪种方式,似乎都比在传递给Oracle的sting中完全丢弃时区信息要好。@Justin:java.sql.Date没有时区。从1970年1月1日格林威治标准时间00:00开始偏移了一毫秒。JVM时区在全球范围内提供服务的系统上没有用处。数据库也有一个时区。这都是难以置信的粘性。看见