当前位置:首页 > 数据库 > 正文内容

ORA-01843: 无效的月份

邻居的猫1个月前 (12-09)数据库1209

上个文章介绍了动态LINQ库。
然后动态造了一个查询,示例如下:

//ctx是EF的DbContext,字段Value是字符串类型
await ctx.Tables.Where("As(Value,\"DateTime?\")>@0",datetime).ToListAsync();

上面的查询条件在Oracle下大概是这样:CAST("Value" AS TIMESTAMP(7))>:datetime
然后报错ORA-01843: 无效的月份,原因是Value字段的值存的是这样的格局:"yyyy-MM-dd hh:mm:ss",oracle无法辨认这样格局的时刻值,那么它能辨认什么样的时刻值呢,查下。

SELECT * FROM v$nls_parameters;

能够看到里边有许多环境参数,其中有NLS_TIMESTAMP_FORMAT和NLS_TIMESTAMP_TZ_FORMAT是咱们需求留意的,它默许安装下是个很古怪的时刻格局,咱们需求修正他们。

alter session set NLS_TIMESTAMP_FORMAT="YYYY-MM-DD HH24:MI:SS.FF";
alter session set NLS_TIMESTAMP_TZ_FORMAT="YYYY-MM-DD HH24:MI:SS.FF";

这样就能辨认Value中的时刻值了,不再报错。
不过需求留意的是这个仅仅是当时会话内有效,如果是EF中需求像下面的这样做。

await ctx.OpenConnectionAsync();
ctx.Database.ExecuteSqlRawAsync("alter session set NLS_TIMESTAMP_FORMAT=\"YYYY-MM-DD HH24:MI:SS.FF\";");
ctx.Database.ExecuteSqlRawAsync("alter session set NLS_TIMESTAMP_TZ_FORMAT=\"YYYY-MM-DD HH24:MI:SS.FF\";");
await ctx.Tables.Where("As(Value,\"DateTime?\")>@0",datetime).ToListAsync();
await ctx.CloseConnectionAsync();//留意这句需求放到finally中

你也能够修正oralce大局NLS_TIMESTAMP_FORMAT环境参数,那么代码就不需求这么改了。
如果是直接sql查询,能够修正sql句子的情况下,还能够用TO_TIMESTAMP办法运用指定的格局化字符串将Value字段转成TIMESTAMP,也能解决问题。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=536

分享给朋友:

“ORA-01843: 无效的月份” 的相关文章

oracle切换用户, 使用SQLPlus切换用户

oracle切换用户, 使用SQLPlus切换用户

在Oracle数据库中,你可以使用`ALTER SESSION SET`命令来切换用户。这个命令可以改变当前会话的用户,但需要注意的是,你必须在具有适当权限的情况下才能切换到其他用户。以下是一个简单的例子,演示如何使用`ALTER SESSION SET`命令来切换用户:```sqlALTER SE...

mysql手册,入门到进阶的数据库管理指南

mysql手册,入门到进阶的数据库管理指南

你可以通过以下链接查看MySQL手册和教程:1. MySQL 8.0 参考手册:这个手册详细记录了MySQL 8.0和NDB Cluster 8.0的功能和变更。你可以访问以下链接获取。2. MySQL 8.4 参考手册:这个手册涵盖了MySQL 8.4和NDB Cluster 8.4的功能和用法。...

数据库助手,提升数据库管理效率的得力助手

数据库助手,提升数据库管理效率的得力助手

你好,我是人工智能助手智谱清言(ChatGLM),很高兴为你服务。请问你有什么关于数据库的问题需要我帮助解答吗?数据库助手:提升数据库管理效率的得力助手随着信息技术的飞速发展,数据库已经成为企业、机构和个人不可或缺的数据存储和管理工具。数据库的管理和维护并非易事,需要专业的知识和技能。为了帮助用户简...

mysql查看执行计划,mysql官方网站

mysql查看执行计划,mysql官方网站

MySQL 查看执行计划主要是通过 `EXPLAIN` 或 `EXPLAIN ANALYZE` 命令来完成的。这两个命令可以帮助你理解 MySQL 如何执行一个查询,包括如何使用索引、连接表的方式、预估的行数等。下面是一个基本的例子:```sqlEXPLAIN SELECT FROM users...

网贷大数据查询,了解个人信用状况的利器

网贷大数据查询,了解个人信用状况的利器

查询网贷大数据的方法有多种,以下是几种常见的途径:1. 征信机构查询: 可以通过中国人民银行征信中心查询个人信用报告,了解自己的信用状况和网贷记录。2. 互联网平台查询: 一些第三方信用报告服务网站如“容易查”等,可以提供网贷大数据查询服务,包括信用评分、网贷黑名单、网贷申请记录等。3....