MySQLクエリでタイムスタンプを日付に変換する


187

timestampMySQLのを日付に変換したい。

user.registrationフィールドをテキストファイルにとしてフォーマットしますyyyy-mm-dd

これが私のSQLです:

$sql = requestSQL("SELECT user.email, 
                   info.name, 
                   FROM_UNIXTIME(user.registration),
                   info.news
                   FROM user, info 
                   WHERE user.id = info.id ", "export members");

私も日付変換を試しました:

DATE_FORMAT(user.registration, '%d/%m/%Y')
DATE(user.registration)

テキストファイルを書き込む前に結果をエコーすると、次のようになります。

email1; name1; DATE_FORMAT(user.registration、 '%d /%m /%Y'); news1

email2; name2; news2

そのフィールドを日付に変換するにはどうすればよいですか?


そのようにファイルを保存すると、その通りですか?SQLクエリを実行するために使用しているコードは何ですか?
seanbreeden

1
質問を編集しました。requeteSQLがクエリを実行しています
remyremy

回答:


371
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'

2
MySQL 5.6.23以降、FROM_UNIXTIME()の値を直接入力する必要があることがわかりました。つまり、DATE_FORMAT(FROM_UNIXTIME(user.registration)、 '%e%b%Y')AS 'date_formatted'
JESii

SELECT * FROM users WHERE DATE_FORMAT(FROM_UNIXTIME(usersuser_created_at)、 '%Y-%b-%e')= '2015-03-06' is this correct format or should I modify this?
Dheeraj Thedijje 2018年

2
@DheerajThedijjeこれは2018-Nov-6として表示されます。'%Y-%m-%d'PHPでフォーマットするときに探している可能性があります(date('Y-m-d',$row->user_created_at))-これ(SQLとPHPの両方のバリエーション)は2018-11-06と表示されます
Chris S.

「hh:mm:ss」のように時間を追加する場合は、これをフォーマット文字列 '%H:%i:%s'
luis.ap.uyen

63

MYSQLでタイムスタンプを日付に変換する

整数のタイムスタンプでテーブルを作成します。

mysql> create table foo(id INT, mytimestamp INT(11));
Query OK, 0 rows affected (0.02 sec)

いくつかの値を挿入する

mysql> insert into foo values(1, 1381262848);
Query OK, 1 row affected (0.01 sec)

見てください

mysql> select * from foo;
+------+-------------+
| id   | mytimestamp |
+------+-------------+
|    1 |  1381262848 |
+------+-------------+
1 row in set (0.00 sec)

数値をタイムスタンプに変換します。

mysql> select id, from_unixtime(mytimestamp) from foo;
+------+----------------------------+
| id   | from_unixtime(mytimestamp) |
+------+----------------------------+
|    1 | 2013-10-08 16:07:28        |
+------+----------------------------+
1 row in set (0.00 sec)

それを読み取り可能な形式に変換します。

mysql> select id, from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') from foo;
+------+-------------------------------------------------+
| id   | from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') |
+------+-------------------------------------------------+
|    1 | 2013 8th October 04:07:28                       |
+------+-------------------------------------------------+
1 row in set (0.00 sec)

%hを%Hに修正してください
Tomot

61

あなただけの日付を取得するcastには

cast(user.registration as date)

特定のフォーマットを使用するために date_format

date_format(registration, '%Y-%m-%d')

SQLFiddleデモ


同じ結果が得られます。フィールドの値の代わりにcast(user.registration as date)が表示されます
remyremy

5
これはうまくいきました-cast(from_unixtime(user.registration)AS date)
Eric Ness

私はそれが私のために働いた特定の日付形式を持っています、そして可能な限り感謝します
セイバータバタバエヤズディ2018年

"as DATETIME"を使用して、時間の分と秒も取得
Enrique

この答えは短くて明確な解決策だと思います。私はこれが好きです。
ローマMatveev

18

場合はregistration、フィールドのタイプは確かにあるTIMESTAMPあなただけ行うことができる必要があります:

$sql = "SELECT user.email, 
           info.name, 
           DATE(user.registration), 
           info.news
      FROM user, 
           info 
     WHERE user.id = info.id ";

登録はyyyy-mm-ddとして表示されているはずです


試しましたが同じ結果が得られます:フィールドの値の代わりにDATE(user.registration)が表示されます
remyremy

誰かが示唆したように、mysqlクライアントを直接使用してクエリを正常に実行できますか?requeteSQL関数について聞いたことがありませんが、正確には何をしますか?
cs0lar 2012

残念ながら、MySQLクライアントを直接使用することはできません。自分のサーバーはありません... requeteSQLを提供しています。基本的にはクエリを実行し、エラーをテストしてメールを送信するだけです...
remyremy

2
実際、自分のフィールドはBIGINTタイプであり、TIMESTAMPではないことに気付きました。コンテンツのみがタイムスタンプ(1328649722)だったため、機能しませんでした。FROM_UNIXTIMEですべてがうまくいきました!
remyremy

この作業はうまくいきました。日付部分のみを取得する必要があったため、datetimeで試しました。
ericsicons 2015年

10

mysqlのDATE関数を使用するだけです。

mysql> select DATE(mytimestamp) from foo;

5
SELECT DATE(UNIX_TIMESTAMP())スピットNULL私のMySQL 5.7.14で
Xenosの

DATE(CURRENT_TIMESTAMP())を試してください
Morey


2

出力でクエリを取得している場合は、実際に結果をエコーするコードを表示する必要があります。requeteSQLを呼び出すコードを投稿できますか?

たとえば、phpで一重引用符を使用した場合、値ではなく変数名が出力されます

echo 'foo is $foo'; // foo is $foo

これはあなたの問題とまったく同じように聞こえ、私はこれが原因であると確信しています。

また、@記号を削除して、より多くの情報が得られるかどうかを確認してください。

そのため

$SQL_result = @mysql_query($SQL_requete); // run the query

なる

  $SQL_result = mysql_query($SQL_requete); // run the query

これにより、クエリがエラーをスローしている場合、エラーの抑制が停止します。



2

FROM_UNIXTIME(unix_timestamp, [format]) は、あなたが必要とすることすべてです

FROM_UNIXTIME(user.registration, '%Y-%m-%d') AS 'date_formatted'

FROM_UNIXTIME数値を取得してDATEオブジェクトに変換する
か、フォーマット文字列が指定されている場合は文字列として返します。

以前の解決策は、最初の日付オブジェクトを取得し、2番目の関数でフォーマットすることDATE_FORMATでした...しかし、これはもう必要ありません


1

試してください:

SELECT strftime("%Y-%d-%m", col_name, 'unixepoch') AS col_name

タイムスタンプをミリ秒単位でyyyy-mm-dd文字列にフォーマットします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.