0

.NET のUniversal Sortable Time 形式を使用して Oracle が日付を返すようにしたいので、このかなり優れた日付/時刻形式を一貫して使用できるようになり、形式として "u" を使用するだけで結果を DateTime に簡単に解析できます。

// "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

(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);
于 2012-08-30T21:23:17.350 に答える