2

日付を文字列として保存しました。例:Fri Apr 04 15:58:43 BST 2014 年は常に末尾にあります。2012 など、特定の年よりも年が少ないレコードを取得するクエリを作成したいのですが、これは可能ですか? どのように?この問題をmysqlから修正することは可能ですか? つまり、日付を文字列から日付に変換しますか?

4

2 に答える 2

4

MySQLSTR_TO_DATE()関数を使用して、これらの値を MySQL の日付に変換できます。

mysql> select str_to_date('Fri Apr 04 15:58:43 BST 2014','%a %b %d %H:%i:%S BST %Y');
+------------------------------------------------------------------------+
| str_to_date('Fri Apr 04 15:58:43 BST 2014','%a %b %d %H:%i:%S BST %Y') |
+------------------------------------------------------------------------+
| 2014-04-04 15:58:43                                                    |
+------------------------------------------------------------------------+
1 row in set (0.00 sec)

サンプル文字列を使用して、2012 年より前の日付のすべての行を返すクエリを示す大まかな例を次に示します。完全なテーブル スキャンが必要になるため、高速ではありませんが、実行する必要がある基本的な概念を示しています。

select *
from your_table
where str_to_date(your_column,'%a %b %d %H:%i:%S BST %Y') < '2012-01-01'
于 2012-07-24T21:37:20.123 に答える
1

ベースライン クエリは次のとおりです。

SELECT REVERSE(LEFT(REVERSE('Fri Apr 04 15:58:43 BST 2014'),4));

ここで実行されます

mysql> SELECT REVERSE(LEFT(REVERSE('Fri Apr 04 15:58:43 BST 2014'),4));
+----------------------------------------------------------+
| REVERSE(LEFT(REVERSE('Fri Apr 04 15:58:43 BST 2014'),4)) |
+----------------------------------------------------------+
| 2014                                                     |
+----------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

OMG私は何を考えていましたか??? 私は実際にそれをデコードしていました

SET @datestring = 'Fri Apr 04 15:58:43 BST 2014';
SELECT CONCAT(YYYY,'-',MM,'-',DD,' ',HHMMSS) dt FROM
(SELECT REVERSE(LEFT(REVERSE(@datestring),4)) as YYYY,
SUBSTR(FLOOR((LOCATE(LEFT(SUBSTR(@datestring,5),3),'JanFebMarAprMayJunJulAugSepOctNovDec')+2)/3)+100,2) MM,
SUBSTR(@datestring,9,2) DD,
SUBSTR(@datestring,12,8) HHMMSS) A;

そして私のデコード作品

mysql> SET @datestring = 'Fri Apr 04 15:58:43 BST 2014';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT CONCAT(YYYY,'-',MM,'-',DD,' ',HHMMSS) dt FROM
    -> (SELECT REVERSE(LEFT(REVERSE(@datestring),4)) as YYYY,
    -> SUBSTR(FLOOR((LOCATE(LEFT(SUBSTR(@datestring,5),3),'JanFebMarAprMayJunJulAugSepOctNovDec')+2)/3)+100,2) MM,
    -> SUBSTR(@datestring,9,2) DD,
    -> SUBSTR(@datestring,12,8) HHMMSS) A
    -> ;
+---------------------+
| dt                  |
+---------------------+
| 2014-04-04 15:58:43 |
+---------------------+
1 row in set (0.00 sec)

mysql>
于 2012-07-24T21:32:27.443 に答える