如何使用绑定变量返回.NET';s";通用可排序时间“;?(另外:to_char中的任意字符串)

如何使用绑定变量返回.NET';s";通用可排序时间“;?(另外:to_char中的任意字符串),.net,oracle,datetime,formatting,.net,Oracle,Datetime,Formatting,我想使用.NET创建Oracle返回日期,这样我就可以始终如一地使用这种相当不错的日期/时间格式,这样我就可以简单地使用“u”作为格式将结果解析为日期时间: // "u" is less unwieldy than "yyyy'-'MM'-'dd HH':'mm':'ss'Z'" myDT = DateTime.ParseExact(oraString, "u", CultureInfo.InvariantCulture); someBindMethod("uformat", "YYYY-MM

我想使用.NET创建Oracle返回日期,这样我就可以始终如一地使用这种相当不错的日期/时间格式,这样我就可以简单地使用“u”作为格式将结果解析为日期时间:

// "u" is less unwieldy than "yyyy'-'MM'-'dd HH':'mm':'ss'Z'"
myDT = DateTime.ParseExact(oraString, "u", CultureInfo.InvariantCulture);
someBindMethod("uformat", "YYYY-MM-DD HH:MM:SS"); // Hypothetical .NET/Oracle lib

-- No matter the format string, date/time will always end with 'Z'.
SELECT to_char(sysdate, :uformat) || 'Z' udt FROM dual
我可以轻松地让Oracle返回以下格式:

SELECT to_char(sysdate, 'YYYY-MM-DD HH:MM:SS') || 'Z' udt FROM dual
但是,添加了串联的“Z”将使查询无法实际使用绑定变量作为格式:

// "u" is less unwieldy than "yyyy'-'MM'-'dd HH':'mm':'ss'Z'"
myDT = DateTime.ParseExact(oraString, "u", CultureInfo.InvariantCulture);
someBindMethod("uformat", "YYYY-MM-DD HH:MM:SS"); // Hypothetical .NET/Oracle lib

-- No matter the format string, date/time will always end with 'Z'.
SELECT to_char(sysdate, :uformat) || 'Z' udt FROM dual
(如果格式字符串以“Z”结尾,Oracle会投诉)

如何传递绑定字符串,以便返回通用可排序时间格式,但仍可以使用任何其他日期格式而不更改查询?

(Q&a格式自答):您可以在绑定变量或单引号Oracle SQL文本中使用双引号添加任意字符串,例如:

SELECT to_char(sysdate, 'YYYY"SOMESTRING"') foo FROM dual
-- returns "2012SOMESTRING"
我不知道这个特性,至少在我的搜索环境中,要找到它有点困难

现在,您可以绑定任何格式,但仍然可以在通用格式上获得“Z”结尾:

const string oraUniversalFormat = "YYYY-MM-DD HH:MM:SS\"Z\"";
const string anyOtherFormat = "YYYY"; // use later
someBindMethod("uformat", oraUniversalFormat);