1

私は現在、タイムスタンプ、日付データ型を必要な表現形式に変換するための Teradata FORMAT キーワードに相当する ANSI を知りません。これは、個々のデータベース固有の関数のように to_char や to_date を使用して実行できることはわかっていますが、将来的に実行中のコードをある DB から別の DB に簡単に移動できるように、ANSI で記述したいと考えています。以下は、Teradata、Netezza、Vertica などの両方で実行できるように、ANSI に変換しようとしている現在の Teradata SQL です。

SELECT
CAST( (MYTIME ( FORMAT 'DDMMYYYY')) AS CHAR( 8 ))         
|| CAST( (MYTIME (FORMAT 'HHMISS'))   AS CHAR(6))          
|| CAST(CAST(MYNUMBER  AS FORMAT'-9(5)') AS CHAR(5))             
FROM MYTABLE
;

現在、FORMAT 'HHMISS'、FORMAT '-9(5)' を ANSI に変換する方法がわかりません。この可能性のある ANSI と同等の関数に関するドキュメントはありますか? 助けてください。

4

2 に答える 2

1

EXTRACT()関数を試すことができます。YMMVですが、最新のRDBMSはそれをサポートしています。ここには本当に良い答えはありません。すべてのDBMSは、「日付の書式設定」の問題を異なる方法で混乱させて処理します。

select 
case when extract(day from current_timestamp) < 10 then '0' else '' end || cast(extract(day from current_timestamp) as varchar(2)) ||
case when extract(month from current_timestamp) < 10 then '0' else '' end || cast(extract(month from current_timestamp) as varchar(2)) ||
cast(extract(year from current_timestamp) as varchar(4)) ||
case when extract(hour from current_timestamp) < 10 then '0' else '' end || cast(extract(hour from current_timestamp) as varchar(2)) ||
case when extract(minute from current_timestamp) < 10 then '0' else '' end || cast(extract(minute from current_timestamp) as varchar(2)) ||
case when extract(second from current_timestamp) < 10 then '0' else '' end || cast(extract(second from current_timestamp) as varchar(2)) 
于 2012-01-16T16:12:54.603 に答える
0

Teradataでは、次のことができるはずです。

/* The double cast is to truncate any time value associated with MyTime */
SELECT CAST(CAST(MyTime AS DATE) AS TIMESTAMP(6)) 
     + ((MyTime - TIME '00:00:00') HOUR to SECOND(6)) AS MyTimeStamp_
  FROM MyTable;

試す別のオプション:

SELECT CreateTimeStamp
     , CAST((CreateTimeStamp (TIMESTAMP(6), FORMAT 'DDMMYYYYBHHMISS.S(6)')) AS CHAR(22)) AS MyTimeStamp_
     , CAST((CreateTimeStamp (TIMESTAMP(6), FORMAT 'DD-MM-YYYYBHH:MI:SS.S(6)')) AS CHAR(26)) AS MyTimeStamp2_
  FROM DBC.Databases
 WHERE DatabaseName = USER;

私の経験では、データベースごとに日付とタイムスタンプを異なる方法で処理する必要があります。1つの解決策が広く受け入れられていない可能性があります。しかし、Teradata、Oracle、SQL Server、MySQLなどで機能するものが欲しいです。

于 2011-12-20T19:16:40.847 に答える