我希望在C# (如to_char(date, format) )中使用Oracle格式,而不需要数据库连接,也不需要编写自己的格式解释器。
示例应用程序(我正在为.NET使用):
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功能格式)。
当我打电话给你
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;不是一个选项)
发布于 2014-05-08 07:36:17
Oracle文档的要点是它适用于DATE_FORMAT,它是Oracle语言的一部分。因此,您只能将它作为PL/语句执行,这就是为什么不能让它在客户端工作:据我所知,IW不是ODP.Net全球化的有效格式掩码。实际上,ODP全球化DateFormat默认为本地的NLS_DATE_FORMAT中的任何内容,这是一个完整的日期格式字符串,而IW则用于获取一年中的一周,而不是格式化日期本身。据我所知,.Net框架中的任何内容都不会识别特定于Oracle的字符串,因此要使其工作,您需要向Oracle发出命令并将结果返回,如页面上的示例所示:
CONSIDER mydatetime
DATE_FORMAT MON-RRRR-DD-HH24改变日期格式似乎太过分了。有一些很好的替代策略,它们是客户端.Net 在这个答案中。
进一步阅读
Oracle结构(OracleDate) 方法的Oracle注意到
返回的值是以线程的OracleGlobalization.DateFormat属性指定的格式表示的OracleDate的字符串表示。
(我的重点)。它的定义可以是在这里发现的。NLS_DATE_FORMAT允许的格式字符串的有用列表,因此通过扩展OracleDate.ToString,可以是在这里发现的。
https://stackoverflow.com/questions/23398669
复制相似问题