2014-01-20 29 views
2

我試圖創建一個帶時間戳類型的列,但只顯示日期(沒有時間)。如何創建只有日期部分顯示在表中的時間戳

我發現本網站上有類似的例子: http://www.w3schools.com/sql/func_curdate.asp

然而,當我運行這個例子SQL:

CREATE TABLE Orders 
(
    OrderId int NOT NULL, 
    ProductName varchar(50) NOT NULL, 
    OrderDate datetime NOT NULL DEFAULT CURDATE(), 
    PRIMARY KEY (OrderId) 
) 

我得到了一個語法錯誤。 我是SQL新手,請幫忙。

謝謝

+0

我不能相信w3schools是錯誤的這一個。 –

回答

0

只存儲日期,您可以指定類型DATE,然後創建一個觸發器,訂購日期設置爲CURDATE()像下面。

CREATE TABLE Orders 
(
    OrderId int NOT NULL, 
    ProductName varchar(50) NOT NULL, 
    OrderDate DATE, 
    PRIMARY KEY (OrderId) 
); 

CREATE TRIGGER mytrigger 
BEFORE INSERT 
ON Orders 
FOR EACH ROW 
SET NEW.OrderDate = CURDATE(); 

sqlFiddle

+0

工作,非常感謝 – shensw

1

CURDATE()是一個函數,你不能把它作爲一個默認值。

http://dev.mysql.com/doc/refman/5.5/en/data-type-defaults.html

在數據類型規範的默認值子句表示爲列的默認值。有一個例外,默認值必須是常數;它不能是一個函數或表達式。這意味着,例如,您不能將日期列的默認值設置爲NOW()或CURRENT_DATE等函數的值。例外是您可以指定CURRENT_TIMESTAMP作爲TIMESTAMP列的默認值。請參見第11.3.5節「自動初始化和更新TIMESTAMP」。

這意味着你可以解決它像這樣的例子:

CREATE TABLE Orders 
(
    OrderId int NOT NULL, 
    ProductName varchar(50) NOT NULL, 
    OrderDate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (OrderId) 
); 

讓我們插入一些到這個表:

INSERT INTO Orders(OrderId, ProductName) VALUES (1,'Foo'); 

現在選擇:

SELECT OrderId,ProductName,OrderDate FROM Orders; 

+---------+-------------+---------------------+ 
| OrderId | ProductName | OrderDate   | 
+---------+-------------+---------------------+ 
|  1 | Foo   | 2014-01-20 02:12:27 | 
+---------+-------------+---------------------+ 

上面給出OrderDate的日期和時間,如果您只想要日期部分,那麼這裏是解決方案:

SELECT OrderId,ProductName,DATE(OrderDate) AS OrderDate FROM Orders; 

+---------+-------------+------------+ 
| OrderId | ProductName | OrderDate | 
+---------+-------------+------------+ 
|  1 | Foo   | 2014-01-20 | 
+---------+-------------+------------+ 
+0

非常感謝答案。 有沒有一種方法可以創建像日期信息一樣存儲時間戳的模式?而不是通過「選擇」查詢。 – shensw

相關問題