1
INSERT INTO DELLL (
DATETIMEMY) 
SELECT    to_date(to_char(SU_MODIFYDATE, 'YYYY/MM/DD'),'YYYY/MM/DD') AS DATETIMEMY
FROM SER_TBLSERVICES WHERE SVE_SERVICEID=422

SU_MODIFYDATE = 2013 年 1 月 18 日

ただし、DELLL日付(DATETIMEMY)形式で挿入した後も同じです

DATETIMEMY = 2013 年 1 月 18 日

4

3 に答える 3

2

にフォーマットを割り当てないでくださいDATE。これらは数値として内部的に保存され、形式はありません。フォーマットは、日付を選択したいときに来ます。したがって、あなたの場合、これを行う必要があります:

最初に日付をそのまま挿入します。それを char に変換して元に戻そうとしないでください。

SQL> INSERT INTO DELLL (
  2  DATETIMEMY) SELECT SU_MODIFYDATE
  3  FROM SER_TBLSERVICES WHERE SVE_SERVICEID=422;

1 row created.

特定の形式で選択するには、 を使用TO_CHARして形式を設定できます。

SQL> select * from delll;

DATETIMEMY
----------
01/18/2013 <-- which isn't what you want to see, you wanted to see yyyy/mmm/dd. so...

SQL> select to_char(DATETIMEMY,'yyyy/mm/dd') DATETIMEMY from DELLL
  2  /

DATETIMEMY
----------
2013/01/18

または、データ型を持つそのセッションのすべての選択に適用するにはdate、デフォルトの表示形式を変更できます。

SQL> alter session set nls_date_format='yyyy/mm/dd';

Session altered.

SQL> select * from delll;

DATETIMEMY
----------
2013/01/18
于 2013-02-14T07:44:04.290 に答える
0

DazzaL は、日付の書式設定、保存、および取得について説明している彼の答えで正しいです。

コードで何をしているのかについて話し合いたいと思います。

Oracle は、秒の精度まで日付を格納します。簡単に言えば、日付をMM/DD/YYYY HH24:MI:SS形式で取得できます。

発行to_date(to_char(SU_MODIFYDATE, 'YYYY/MM/DD'),'YYYY/MM/DD')することにより、実際には日付を日の部分まで切り捨てています。したがって、この値を取得しようとすると、日付が切り捨てられてHH24:MI:SSいるため、その部分が含まれます。00:00:00

すべての詳細 (年、月、日から時、分、秒まで)SU_MODIFYDATEを の列に挿入するDELLL場合は、次を使用する必要があります。

INSERT INTO DELLL (
DATETIMEMY) 
SELECT SU_MODIFYDATE AS DATETIMEMY
FROM SER_TBLSERVICES WHERE SVE_SERVICEID=422

これにより、列の日付のすべての部分がSU_MODIFYDATE新しい列に挿入されます。

たとえば、日付を分まで切り捨てたい場合は、to_date(to_char(SU_MODIFYDATE, 'YYYY/MM/DD HH24:MI'),'YYYY/MM/DD HH24:MI')

同様に、選択に応じて、年の部分から 2 番目の部分まで日付を切り捨てることができます。

切り捨てられた日付を挿入する場合は、既存のクエリを使用する必要があります。すべての部分を含む日付を挿入する場合は、 and を使用して切り捨てを避けてto_charくださいto_date

于 2013-02-14T09:18:15.927 に答える
0

この例の INSERT または SELECT は、日付の保存方法を変更しません。日付を選択すると、現在の接続形式の設定/ロケールを使用して日付がフォーマットされます。

TO_DATE を使用しており、戻り値が他の日付と同じであることを選択すると、ロケールに従ってフォーマットされます。

于 2013-02-14T07:10:52.997 に答える