繁体   English   中英

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

[英]SQL Change date format from yyyy-mm-dd to dd-mm-yyyy

我已经创建了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

谁能告诉我或告诉我该怎么做?

先感谢您

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

格式应用于输入和输出,因此您只需要将正确的格式(可以在MySQL手册中找到) 应用于 SELECT语句。

您不能在mysql中更改默认日期格式。

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

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


我建议的第一件事是将您的日期列作为日期类型,这将为您的日期提供以下格式“ 2015-01-01”。

如果执行此操作,则可以使用DATE_FORMAT-链接 DATE_FORMAT函数中的第二个值允许您自定义返回的日期,如果您查看链接,可以使用很多不同的方法:

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

您还有另一个选择是将日期以您已经想要的格式存储为charvarchar列。

但是,很明显,此列将不被视为存储日期,因此在使用> < BETWEEN时,在where子句中无法提供正确的比较,也不能在order by子句中提供正确的排序。 在这种情况下,它毕竟只是一串数字。

但是,如果确实需要在此列上使用“ where或“ order by ”将其更改回查询中的date ,则可以使用STR_TO_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'

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

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

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

您可以通过创建视图并引用该视图而不是(基础)表来执行您可能需要的操作。

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!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM