首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-01843 -无效的月份oracle

ORA-01843 -无效的月份oracle
EN

Stack Overflow用户
提问于 2014-08-05 19:49:37
回答 1查看 6.6K关注 0票数 1

下面我试图从oracle数据库中提取信息。但是,我一直收到这样的错误:

代码语言:javascript
复制
Warning: oci_execute(): ORA-01843: not a valid month

为什么我的代码发布这个错误?蒂娅!

代码:

代码语言:javascript
复制
$objConnect = oci_connect("user", "password", "(description=(address=(protocol=tcp)(host=host)(port=1533))(connect_data=(service_name=sid)))");
$weekSQL2 =  "SELECT * FROM INTOXDM.LSS_COP WHERE COP_WEEK = to_date('2014-08-06 00:00:00', 'yyyy-mm-dd HH24:MI:SS')";
$weekParse2 = oci_parse($objConnect, $weekSQL2);  
$weekExecute2 = oci_execute($weekParse2);
$week2 = oci_fetch_all($weekParse2,$week12);

注意事项

以下是我的数据库中的日期:

代码语言:javascript
复制
2014-06-23 00:00:00.0

这使我更加困惑,因为我的格式与数据库中的格式完全相同。

EN

回答 1

Stack Overflow用户

发布于 2014-08-05 20:03:41

最有可能的解释是COP_WEEK列不是定义为COP_WEEK,而是定义了其他一些数据类型(例如,VARCHAR),

对于OP查询,Oracle正在执行COP_WEEK列中值从VARCHARDATE的隐式数据类型转换。隐式TO_DATE转换使用客户端NLS_DATE_FORMAT变量中指定的格式,很可能是默认的'DD-MON-RR'。不管它是什么,它都与列中存储的内容“不匹配”。

或者,如果NLS_DATE_FORMAT确实匹配列中存储的大多数值,那么至少有一个值的COP_WEEK值与格式不匹配。

有一个代码"fix“(我把它放在引号中,因为它不是真正正确的修复)是使用TO_DATE函数使转换显式化:

代码语言:javascript
复制
WHERE TO_DATE(COP_WEEK,'yyyy-mm-dd HH24:MI:SS') = 

代码"fix“的另一个选项是将裸VARCHAR列与VARCHAR文本进行比较。

代码语言:javascript
复制
WHERE COP_WEEK = '2014-08-06 00:00:00.0'

这样做的好处是允许Oracle使用索引,而不是要求对每一行进行转换。

更好的选择是将COP_WEEK存储为日期数据类型,而不是VARCHAR,但这不仅仅是对代码的更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25147120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档