1

これが私のdbテーブル構造です

CREATE TABLE IF NOT EXISTS `db_table` (
  `start_date` date NOT NULL COMMENT 'Year-Month-Day',
  `username` varchar(15) NOT NULL,
  PRIMARY KEY (`start_date`,`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

PHP

$q_date = '2013-02-24 01:00:00';
$t_time = date('H:i:s',time());  //Output = 05:42:37   Hours:Minutes:Seconds

SQL クエリ

SELECT username WHERE UNIX_TIMESTAMP(start_date) >= '".strtotime($q_date)."'

ご覧のとおり、start_date 列のタイプは「Year-Month-Day」のような日付であり、(start_date $t_time) のような datetime で UNIX_TIMESTAMP を使用する必要があるため、UNIX_TIMESTAMP(2013-04-24 05:42: 37)

それは可能ですか?何かアイデアはありますか?

ありがとうございました。

4

2 に答える 2

1

データベースについて言及しましたが、それはmysqlだと思います。

「ご覧のとおり、start_date 列のタイプは「年月日」のような日付です」と言いましたが、start_date は mysql 日付形式の日付です。変換はデータの選択の問題です。もちろん、start_date を varchar (文字列) として設計すると、好きな形式の日付を入れることができます。ただし、これが日付になるまで、selects の日付を UNIX タイムスタンプに変換する必要があります。UNIX タイムスタンプとの変換の例。

select now(), unix_timestamp(now()),  from_unixtime(unix_timestamp(now())),
       unix_timestamp('2013-07-09 09:04:30'), from_unixtime(1373353795)

あなたにあげる

2013-07-09 09:10:15, 1373353815, 2013-07-09 09:10:15, 
1373353470, 2013-07-09 09:09:55

私はphpに精通しておらず、どの形式がstrtotimeを与えるかわかりませんが、now()が返すのと同じように返す必要があります(他のロケールを使用でき、形式は異なる場合がありますが、いつでも必要に応じてタイムスタンプをフォーマットできます

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_from-unixtime

私のアドバイスは、1回の変換を行い、常にタイムスタンプに変換することです-より高速です:

SELECT username WHERE start_date >= some_php_conversion_which_produces_unix_timestamp.
于 2013-07-09T07:15:46.910 に答える
1

DBテーブルの列がDATEの場合、テーブルにデータを挿入するとDBに時間が挿入されないため、DATE型をDATETIMEに変換することは本当に不可能です。そのため、SQL 関数を使用しても、実際の情報を見つけることはできません。間違った出力が得られます。

したがって、適切な出力を取得するには、可能であればフィールド タイプを DATETIME に変更してください。それが最善の解決策になると思います。

于 2013-07-09T07:29:46.330 に答える