2015-12-22 5 views
6

私はカラムタイムスタンプのデフォルトのcurrent_dateを使用してmysqlテーブルを作成する方法は?

DROP TABLE IF EXISTS `visitors`; 
CREATE TABLE `visitors` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `ip` VARCHAR(32) NOT NULL, 
    `browser` VARCHAR(500) NOT NULL, 
    `version` VARCHAR(500) NOT NULL, 
    `platform` ENUM('w','l','m') NOT NULL, 
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_DATE(), 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

を試し列CURRENT_DATE()

にデフォルト値でMySQLのテーブルを作成する必要がありますが、問題が何であるかを

Query: CREATE TABLE `visitors` (`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `ip` VARCHAR(32) NOT NULL, `browser` VARCHAR(500) NO... 

Error Code: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_DATE() NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1' at line 7 

Execution Time : 0 sec 
Transfer Time : 0 sec 
Total Time  : 0.063 sec 

エラーを足すのか?私は日付のみ ないフルタイムの情報とユニークに必要

...

あなたは私を助けることができますか?

+0

これは 'TIMESTAMP'列のデフォルトの動作です。この場合、 'DEFAULT'を指定する必要はありません。 – eggyal

+0

TIMESTAMPとDATEは同じフォーマットではありません。タイムスタンプは数字で、dateはフォーマットされた日付です。どちらか一方を選択してください。 – Anton

+0

年、月、日だけが必要な場合は、 '' date 'DATE NOT NULL DEFAULT CURRENT_DATE() 'を試してみませんか? –

答えて

14

使用CURRENT_TIMESTAMP機能の代わりに、CURRENT_DATE()機能

はこれを試してみてください:

DROP TABLE IF EXISTS `visitors`; 
CREATE TABLE `visitors` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `ip` VARCHAR(32) NOT NULL, 
    `browser` VARCHAR(500) NOT NULL, 
    `version` VARCHAR(500) NOT NULL, 
    `platform` ENUM('w','l','m') NOT NULL, 
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 
+0

CURRENT_TIMESTAMPには、時間、分、および秒単位のフルタイム情報も設定されていません。私は年、月、日のみ必要です –

+0

1つのオプションは、示されているようにタイムスタンプとして設定することですが、実際にデータを取得するときは、日付としてキャストして時間、分、秒を切り捨てます。'SELECT DATE(' date') 'は、あなたが望むようなフォーマットでそれを返しますが、あなたはそのカラムに対して必要な振る舞いを保持します。 – Redbeard011010

+0

私は理解していますが、年月日のあるユニークなIPにする必要があります タイムスタンプとして のようにユニークであれば、2〜3秒後に再び新しい行が挿入されます... IPが今日存在しているのはテーブル に書かないでください。日付フォーマット –

0

は、あなたは自分のクエリで()NOWによってCURRENT_DATE()を置き換える必要があります。 私はそれを試してみて、それは大丈夫です。

+0

しか必要ないので、NOW()はmysqlの 'CURRENT_TIMESTMAP'とみなされます –

0

これは少し遅れているかもしれませんが、他の人にとって参考になるかもしれません。

[タイムスタンプ] [日時] NOT NULL制約[DF_myTable_TimeStamp] DEFAULT(GETDATE()):

私のアプローチは、次のように)(GETDATEを使用することでした。

[タイムスタンプ]は問題の列です。

結果は、たとえば次のとおりです。2017年11月2日11:58:34.203

これをトリミングするために、私は

セット次

宣言@mydate日時を使用@ mydate = '2017-11-02 11:58:34.203'

SELECT try_convert(nvarchar(20)、@mydate、120)

この最終的な結果は次のとおりです。2017年11月2日11時58分34秒

You can actually set this in MSSQL Management Studio

関連する問題