首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ODP.NET: Oracle格式为“只输出”格式

ODP.NET: Oracle格式为“只输出”格式
EN

Stack Overflow用户
提问于 2014-04-30 21:53:54
回答 1查看 2.1K关注 0票数 2

我希望在C# (如to_char(date, format) )中使用Oracle格式,而不需要数据库连接,也不需要编写自己的格式解释器。

示例应用程序(我正在为.NET使用):

代码语言:javascript
复制
namespace OracleDateToCharTest
{
    using System;
    using Oracle.DataAccess.Client;
    using Oracle.DataAccess.Types;

    class Program
    {

        /// <param name="fmt"> Oracle-like format string. </param>
        public static string OracleDateToChar(DateTime date, string fmt)
        {
            //// preparing format for ToString()
            OracleGlobalization og = OracleGlobalization.GetThreadInfo();
            string prevFormat = og.DateFormat;
            og.DateFormat = fmt;

            try
            {
                //// converting to OracleDate
                OracleDate odacDate = new OracleDate(date); 
                //// setting format for ToString()
                OracleGlobalization.SetThreadInfo(og);
                return odacDate.ToString();
            }
            catch (OracleTypeException ex)
            {
                if (ex.Number == 1820)
                {
                    //// described issue
                }
                throw;
            }
            finally
            {
                og.DateFormat = prevFormat;
                OracleGlobalization.SetThreadInfo(og);
            }
        }

        static void Main(string[] args)
        {
            var x = OracleDateToChar(DateTime.Now, "mm-dd-yyyy");
            var y = OracleDateToChar(DateTime.Now, "mm-dd-yyyy HH24:Mi:ss");
            var z = OracleDateToChar(DateTime.Now, "IW"); //// exception
        }
    }
}

它适用于"mm-dd-yyyy""mm-dd-yyyy HH24:Mi:ss"等格式,但不幸的是,它不适用于“只输出”格式,如"IW" (仅输出格式是您可以根据表9-4在1029.htm上指定的TO*_DATETIME功能格式)。

当我打电话给你

代码语言:javascript
复制
OracleDateToChar(DateTime.Now, "IW")

我在ORA-01820 format code cannot appear in date input format行中得到ToString()异常。

如果我在ToDate()方法中得到了这个错误,我会理解,但是在ToString()中,它似乎是ODP.NET中的一个错误。

问题:是否有一种方法可以实现OracleDateToChar方法来处理仅输出的格式?(假设从oracle数据库调用select to_char(:date, :fmt) from nvl;不是一个选项)

EN

回答 1

Stack Overflow用户

发布于 2014-05-08 07:36:17

Oracle文档的要点是它适用于DATE_FORMAT,它是Oracle语言的一部分。因此,您只能将它作为PL/语句执行,这就是为什么不能让它在客户端工作:据我所知,IW不是ODP.Net全球化的有效格式掩码。实际上,ODP全球化DateFormat默认为本地的NLS_DATE_FORMAT中的任何内容,这是一个完整的日期格式字符串,而IW则用于获取一年中的一周,而不是格式化日期本身。据我所知,.Net框架中的任何内容都不会识别特定于Oracle的字符串,因此要使其工作,您需要向Oracle发出命令并将结果返回,如页面上的示例所示:

代码语言:javascript
复制
CONSIDER mydatetime
DATE_FORMAT MON-RRRR-DD-HH24

改变日期格式似乎太过分了。有一些很好的替代策略,它们是客户端.Net 在这个答案中

进一步阅读

Oracle结构(OracleDate) 方法的Oracle注意到

返回的值是以线程的OracleGlobalization.DateFormat属性指定的格式表示的OracleDate的字符串表示。

(我的重点)。它的定义可以是在这里发现的NLS_DATE_FORMAT允许的格式字符串的有用列表,因此通过扩展OracleDate.ToString,可以是在这里发现的

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

https://stackoverflow.com/questions/23398669

复制
相关文章

相似问题

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