実際のタイムスタンプではなくテキストとして値を保存するタイムスタンプというフィールドがあります。残念ながら、ロギング アプリケーションは変更できません。
そう
table.Timestamp -> text field with format -> "Wed Mar 02 13:28:59 CDT 2011"
これをタイムスタンプセレクターとして使用して、最新の行を除くすべてをパージするクエリを開発しています。これは、文字列を日付に変換します->
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' )
私のクエリは完全に機能します...
ただし、現在の時刻が夏時間かどうかによって、文字列値 -> 'CDT' -> 'CDT' と 'CST' の間で変化することがわかりました。サマータイム中は「CDT」としてログに記録し、その逆も同様です。
したがって、これを実行すると、「CST」を含むすべての行が無視されます->
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' )
これを実行すると、「CDT」を含むすべての行が無視されます->
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CST %Y' )
両方の文字列形式に対して実行する方法はありますか?
編集 -
したがって、次のデータが与えられます (「CDT」と「CST」のみが異なります。
"Wed Mar 02 13:28:59 CDT 2011" and "Tue Mar 08 09:42:07 CST 2011"
現在、次のように返されます。
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ) Returns - Wed Mar 02 13:28:59 CDT 2011
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CST %Y' ) Returns - Tue Mar 08 09:42:07 CST 2011
何があっても「Tue Mar 08 09:42:07 CST 2011」を返したいです。
編集2:
これは私の主なクエリです:
DELETE
FROM `table` main
WHERE STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CST %Y' ) <
(SELECT COALESCE(STR_To_DATE( sub.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ), STR_To_DATE( sub.Timestamp , '%a %b %d %H:%i:%s CST %Y' ))
FROM `table` sub
WHERE sub.Retrieving_User = main.Retrieving_User )