2014-10-18 68 views
0

我已經創建MySQL表:SQL更改日期格式DD-MM-YYYY

CREATE TABLE EMP(
EMPID INTEGER NOT NULL (5), 
SURNAME VARCHAR(25), 
SAL INTEGER(5), 
JON VARCHAR(25), 
START_DATE DATE, 
END_DATE DATE, 
DEPNO INTEGER(5) 
); 

與以下記錄:

INSERT INTO EMP 
(EMPID,SURNAME,SALARY,JOB,START_DATE,END_DATE,DEPNO) 
VALUES 
('1','Vorosila','500000','COO','20150101',null,'1'); 

但是我需要更改日期格式從2015 01 01到01 01 2015

任何人都可以告訴我或告訴我該怎麼做?

預先感謝您

回答

1

DATE值不具有「格式」,他們是代表在時刻對象(或整個天,但仍然保持獨立的格式)。

格式應用於輸入和輸出,因此您只需將正確的格式應用到SELECT語句中即可找到in the MySQL manual

1

您不能更改mysql中的默認日期格式。

我曾經希望默認日期是可編輯的,所以我不必跳過這些箍來獲得我真正想要的日期,mysql甚至有一個date format系統變量,但它沒有被使用。 Date Format Mysql - link

你真正應該做的是將其存儲爲默認格式Year-Month-Date,然後將其轉換爲select。


我建議的第一件事就是爲你的約會列作爲日期類型,這將使​​您的日期如下格式「2015年1月1日」。

如果你這樣做,那麼你可以使用DATE_FORMAT - link - 在DATE_FORMAT函數的第二個值允許您自定義返回的日期,並且還有,如果你看一下鏈接,你可以用這個做很多不同的事情:

SELECT 
DATE_FORMAT(`START_DATE`,'%d-%m-%Y') 
AS `START_DATE` 
FROM ... 

您擁有的其他選項是將您的日期以您想要的格式存儲爲charvarchar列。

然而,隨着應該是顯而易見的,本專欄將不會被視爲存儲日期,並利用> < BETWEEN或在order by條款的正確排序時,這樣不會給你一個where條款的正確比較。畢竟在這種情況下只是一串數字。

但是你可以再使用STR_TO_DATE - link,如果你確實需要使用whereorder by在此列更改回一個date查詢中 - 在這種情況下,第二個值是在你的「日期」的自定義格式該列。記住了where,你需要將它與正確的MySQL的格式比較如下圖所示:

SELECT 
`START_DATE` 
FROM table 
WHERE STR_TO_DATE(`START_DATE`,'%d-%m-%Y') BETWEEN '2015-01-01' and '2016-01-01' 
0

你可以做你可能想要的東西通過創建一個視圖,並指的是代替(底層)表。

CREATE VIEW emp_view AS 
    SELECT empid, 
    surname, 
    sal, 
    jon, 
    date_format(start_date, '%d-%m-%Y') as start_date, 
    date_format(end_date, '%d-%m-%Y') as end_date, 
    depno 
    FROM emp; 

注意這改變日期欄到varchar的類型,所以比較將不再按預期工作:

SELECT * FROM emp_view WHERE start_date > '01-12-1924'; // fails! 
+0

不會喜歡一個字符串'%DD-MM-%YYYY%給他不正確的格式?這是我在MySQL中使用它時得到的結果'1stD-JanuaryM-2015YYY' – mrmryb 2014-10-19 08:42:52

+0

@mrmryb:你是對的:我沒有驗證格式。對我感到羞恥。糾正。 – wallyk 2014-10-19 16:46:32