0

我想使用 .NET 的通用可排序时间格式使 Oracle 返回日期,这样我就可以始终如一地使用这种相当不错的日期/时间格式,因此我可以轻松地将结果解析为 DateTime,只需使用“u”作为格式:

// "u" is less unwieldy than "yyyy'-'MM'-'dd HH':'mm':'ss'Z'"
myDT = DateTime.ParseExact(oraString, "u", CultureInfo.InvariantCulture);

我可以很容易地让 Oracle 返回这种格式:

SELECT to_char(sysdate, 'YYYY-MM-DD HH:MM:SS') || 'Z' udt FROM dual

但是,使用连接添加的“Z”会使查询实际上无法使用以下格式的绑定变量:

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 会抱怨)

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

4

1 回答 1

0

(问答格式自我回答):您可以在绑定变量或单引号 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);
于 2012-08-30T21:23:17.350 回答