SQL更改日期格式从yyyy-mm-dd到dd-mm-yyyy

时间:2014-10-18 19:20:42

标签: mysql date

我创建了MySQL表:

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更改为2015年01月01日

有人可以告诉我或告诉我该怎么做吗?

先谢谢你

4 个答案:

答案 0 :(得分:1)

DATE值没有“格式”,它们是表示时间(或整天,但仍与格式无关)的瞬间的对象。

格式应用于输入和输出,因此您只需将in the MySQL manual的正确格式应用于SELECT语句。

答案 1 :(得分:1)

您无法更改mysql中的默认日期格式。

我曾经希望默认日期是可编辑的,所以我不必跳过这些箍来获得我真正想要的日期,mysql甚至有一个date format系统变量,但它没有被使用。 Date Format Mysql - link

您应该做的是将其存储为默认格式Year-Month-Date,然后在选择时将其转换。


我建议的第一件事就是将您的日期列作为日期类型,这会使您的日期格式为以下格式' 2015-01-01'。

如果你这样做,那么你可以使用DATE_FORMAT - link - DATE_FORMAT函数中的第二个值允许你自定义返回的日期,如果你看的话,你可以做很多不同的事情。在链接:

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

您拥有的另一个选项是以charvarchar列的格式存储日期。

但是,显而易见的是,此列不会被视为存储日期,因此在使用where或正确排序时,不会在> < BETWEEN子句中给出正确的比较。 order by条款。毕竟这只是一串数字。

但是,如果您确实需要使用此列上的whereorder by将其更改回查询中的date,则可以使用STR_TO_DATE - link在这种情况下,第二个值是您日期的自定义格式&#39;在专栏中。请记住where,您需要将其与正确的mysql格式进行比较,如下所示:

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

答案 2 :(得分:0)

MySQL中,您可以使用DATE_FORMAT方法更改日期格式,该方法类似于Oracle中的to_char

DATE_FORMAT(SYSDATE(), '%DD-%MM-%YYYY');

有关说明符的更多信息,请检查此线程http://www.sqlines.com/oracle-to-mysql/to_char_datetime

答案 3 :(得分: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!