1

データベース スキーマの問題を修正する方法を見つけようとしています。

列 1 には ymd H:i:s の日付が格納されます (タイムスタンプ フィールド)

col1 = 2009-11-12 00:00:00

列 2 に時刻が格納されます (varchar)

col2 = 15:48

別々に格納するよりも1列に格納した方が効率的だと考えているので、3列目を日時フィールドにしようとしています

col3 = 2009-11-12 15:48:00

オリジナルを維持しなければ問題ありません。

4

3 に答える 3

1

はい、必ず1つのフィールドを使用してください。必要に応じて、後でそのフィールドから日付または時刻だけを取得できます。次のクエリを実行して、col3を正しい日時で更新できると思います。

UPDATE tablename
SET col3 = CAST(LEFT(col1, 10) + " " + col2 + ":00", DATETIME)

これらの古いフィールド(col1とcol2)にアクセスするものがない場合は、わかりやすくするためにそれらを削除する必要があります。その場合、同じデータに対して2つのフィールドを維持するかどうかを決定するのは難しいでしょう。

于 2012-06-07T22:17:31.447 に答える
1

他の答えとは反対に...これらの列を組み合わせることはすぐにはお勧めしません。

日付(時刻を無視)および/または時刻(日付を無視)に基づいて行を選択する場合は、列がどのように照会されるかを検討してください(私の経験では、効率的な照会はディスク領域の効率よりも重要です)。これらを別々の列に配置する必要があります。日時列から日付を取得することはできますが、行が多い場合は、クエリを実行する前に各行でそれを行うのは非常に非効率的です。(たとえば...このSOの質問を検討してください)

于 2012-06-07T22:19:53.413 に答える
1

Addtimeあなたが必要とすることをするべきです

mysql> select addtime('2012-05-05 00:00:00', '11:12');
+-----------------------------------------+
| addtime('2012-05-05 00:00:00', '11:12') |
+-----------------------------------------+
| 2012-05-05 11:12:00                     |
+-----------------------------------------+
1 row in set (0.00 sec)
于 2012-06-07T22:16:54.847 に答える