2017-10-24 12 views
1

データをdatetimeに変換するVTS関数があります。 私の目的は、この特定のフォーマット(MM-DD-YYYY HH:mm)でdatetimeを選択することです。ファイアバード日時フォーマット

TIMEカラム(Int64の)初期データ:

131473080013710000 
131473080026060000 
131473080039030000 

VTS(列)機能(select VTS("TIME"))

20170816000001.3710000 
20170816000002.6060000 
20170816000003.9030000 

必要結果(YYYY-MM-DD HHと変換:mm):

2017-08-16 00:00 
2017-08-16 00:00 
2017-08-16 00:00 

私は試しました:select VTS("TIME", 'YYYY-MM-DD HH:mm')
にErrorMessage:function VTS could not be matched

+1

「VTS機能」とは何ですか?とにかく、書式設定の値は、SQLステートメントではなく、クライアントによって行われるのが最適です。 – ain

+0

'VTS(" TIME "、" YYYY-MM-DD HH:mm ")を選択してください - これは実際のクエリではなく、"

から "句を含んでいません。または、Firebird SQLサーバを使用せず、Firebird以外のデータベース –

+0

の特定のフォーマット(MM-DD-YYYYおよび必要な結果(YYYY-MM-DD) - あなたはどのようなフォーマットが必要ですか?文字列出力または日付出力 –

答えて

0

VTS機能以来は伝えテキストデータを返します(ただし、CHARACTER SET NONEは本当に脆弱であり、おそらく将来的に問題を引き起こすだろう!)あなたは今、そのテキストが何を意味するかに見ずに文字列関数とそのテキストを操作することができます。

は、あなたが本当にしたい引用された多くのフォーマットのどの非常に明確ではありませんhttp://www.firebirdtest.com/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-functions-scalarfuncs.html

で文字列関数を参照してください。この特定のフォーマット(:MM MM-DD-YYYY HH)と

選択日時。
必要な結果(YYYY-MM-DD HH:MM):

あなたが質問に二回、それを引用した私たちは、後者に固執するでしょう。

次の質問は、サーバーのテキストまたは日付を取得するかどうかです。 おそらく、ネイティブの日付値ではなく、SQLサーバー出力として書式付きテキストを使用したいとします。

次に、'20170816000001.3710000'のような値で3つのステップを実行する必要があります。

  1. YYYYMMDDの部分をすべて削除します。
  2. ダッシュで区切られたDD、MM、およびYYYY部分
  3. 「00:00」を文字列に追加します。

ステップ1:

select Left('20170816000001.3710000', 8) from rdb$Database 

"20170816" 

ステップ2:

select Overlay(
    Overlay(
    Left('20170816000001.3710000', 8) 
    PLACING '-' FROM 7 FOR 0) 
    PLACING '-' FROM 5 FOR 0) 
from rdb$Database 

"2017-08-16" 

ステップ3:

select Overlay(Overlay(Left('20170816000001.3710000', 8) 
    PLACING '-' FROM 7 FOR 0) PLACING '-' FROM 5 FOR 0) || ' 00:00' 
from rdb$Database 

"2017-08-16 00:00" 

しかし通常はSQLサーバーでテキストに日付を変換するために、間違った考えでありますレベル。 通常、サーバーから平文のDate値を返します。アプリケーションで、その日付を任意のテキスト形式にフォーマットする必要があります。

select cast(
    Overlay(Overlay(
    Left('20170816000001.3710000', 8) 
    PLACING '-' FROM 7 FOR 0) PLACING '-' FROM 5 FOR 0) 
    as date) 
from rdb$Database 
+0

フィードバックいただきありがとうございます。 日時フォーマットの順序はそれほど重要ではありません.YYYMMDDソリューションがあれば、簡単にDDMMYYYYに変換できます。 他のことは、私があなたに与えた数字で上に取り組んでいることですが、これは単なる例であり、何千もの検索レコードで同じことをするつもりはありません。 "VTSを選択(" TIME ")して、結果を日付時刻YYYY-MM-DD HH:mm:ssのように変換する必要があります – AA21

+0

定数をVTS関数呼び出しで置き換えます。誰もがそれを知っているので、私はそれを強調しません。代わりに、停止した場所から届く場所に文字列を変換する方法を段階的に示します。サーバーからフォーマットされていない非文字列のネイティブ日付値を取得し、日付値を任意のテキスト表現にフォーマットするAPPLICATIONを使用します。 –

関連する問題