1

タイムスタンプが VARCHAR 形式で格納されているテーブルに列がありますが、これらを別のテーブルの DATETIME 値の列と比較して時間間隔を見つける必要があるため、VARCHAR タイムスタンプを DATETIME にキャストまたは変換したいと考えています。ただし、キャストと変換の両方で問題が発生しています。

VARCHAR タイムスタンプの形式は次のようになります "29/07/2012 01:53:36 +12"

クエリの使用:

SELECT CAST(event_timestamp AS datetime) FROM the_table

生成しERROR: date/time field value out of range: "29/07/2012 01:53:36 +12"ます。

クエリの使用:

SELECT CONVERT(datetime, event_timestamp, 131) from the_table;

生産する

ERROR:  syntax error at or near ","
LINE 1: select CONVERT(datetime, event_timestamp, 131) from the_tab...
                               ^ (note: this is pointing at the first comma). 

getdate()CONVERT のエラーは、データ ソースなどの一般的な関数を使用しても実際に発生します。このデータベースは ANSI SQL-92 を使用しています (そう言われています)。誰でもこれで私を助けてもらえますか?

4

3 に答える 3

2

これは本当に面倒に思えますが、次のように動作するはずです。

select dateadd(hh, cast(right(tv, 3) as int),
               CONVERT(datetime, left(tv, 10), 103)+CONVERT(datetime, substring(tv, 12, 8), 108)
              )
from (select '29/07/2012 01:53:36 +12' as tv) t

以前に日時を追加したことはありませんが、これは SQL Server 2008 で機能しました。

SQL Server が yyyy、mm、mmm、dd などを中心に構築された柔軟な表記法をサポートできないのはなぜですか?

実際のデータベースは、(最新のデータベース エンジンと同様に) Postgres に基づく Aster Data です。このデータベースでは、to_timestamp() を使用します。http://www.postgresql.org/docs/8.2/static/functions-formatting.htmlのドキュメントを参照してください。呼び出しは次のようになります。

to_timestamp(val, 'MM/DD/YYYY HH:MI:SS tz') -- not sure if this gets the +12

日付変換用の ANSI 関数はないため、各データベースが独自に行います。文字列関数でさえデータベースによって異なるため (substr? substring? charindex? instr? location?)、これを行う ANSI の方法はありません。

于 2012-08-08T15:55:26.130 に答える
0

間違った構文を使用している場合は、次を試してください。

CONVERT(varchar(X), datetimeValue, 131) 

ここで、Xは必要な文字の総数です。

次に、各値が同じ構造を共有していると仮定して、ととdatetimeValueの一致を検索できます。event_timestampこれにより、文字列を文字列と照合できます。

于 2012-08-08T15:29:16.277 に答える
0

私が間違っていない場合、標準(ANSI SQL)のCAST演算子は、常にISO形式の時刻/日付/タイミングリテラル('YYYY-MM-DD')を期待します。

ただし、Teradata V12のマニュアル(テストできません)によると、CAST演算子の形式は次のとおりです。

CAST(character_expression AS TIMESTAMP timestamp_data_attribute)

文字値とdate_data_attributeオプションのFORMAT指定子です。

したがって、あなたの場合、これはおそらく次のようになります。

cast(event_timestamp AS TIMESTAMP FORMAT 'MM/DD/YYYY HH:MI:SS Z');

ただし、フォーマットの定義については完全にはわかりません。あなたはおそらくそれを調整する必要があるでしょう

ところで:CONVERT標準のSQL関数ではありません。これはSQLServer固有です。

于 2012-08-08T16:31:53.927 に答える