4

我在 MySql 中有日期类型列。默认情况下,MySql 日期格式为 YYYY/MM/DD。但实际上我更喜欢使用 DD/MM/YYYY 格式。

我可以更改列日期格式吗?

4

5 回答 5

3

不,您不能更改 DATE、DATETIME 或 TIMESTAMP 列的默认 MySQL 格式。

但是您可以在 SQL 语句中使用 MySQL 函数将 DATE 表达式输出为不同格式的字符串。

DATE_FORMAT( datecol , '%m/%d/%Y')  AS datecol

(这将在 SELECT 列表中正常工作,但避免在任何谓词中使用它(即 WHERE 子句)。在那里,您将要引用裸列,并使用转换您首选格式 'MM/DD/YYYY' 的字符串STR_TO_DATE 函数,例如

datecol >= STR_TO_DATE('07/16/2012','%m/%d/%Y')

话虽如此,我认为在与数据库的交互中使用 MySQL 默认 DATE 格式并处理代码中的格式更改确实会更好。

于 2012-07-18T15:44:56.267 回答
2

其他 DBMS 具有您可以更改的默认格式,即使在会话的基础上也是如此。例如,在 Oracle 中,您可以简单地更改NLS_DATE_FORMAT会话变量,Oracle 将使用您的自定义格式进行输入和输出。MySQL 没有。

有几个服务器变量(date_formatdatetime_format) 您可能会考虑适合此目的:

mysql> SHOW VARIABLES LIKE 'date%_format';
+-----------------+-------------------+
| Variable_name   | Value             |
+-----------------+-------------------+
| date_format     | %Y-%m-%d          |
| datetime_format | %Y-%m-%d %H:%i:%s |
+-----------------+-------------------+

首先,它们是服务器端的并且它们不是动态的(它们不能在运行时设置)。但更糟糕的是,它们从未真正使用过。这些变量根本不会影响日期格式。它们目前已被弃用并排队等待删除。

总结一下:不,你不能。日期格式是固定的。

于 2014-01-23T17:31:59.503 回答
0

尝试echo date('d/m/Y', strtotime($date));

这将获取您现有的日期,将其转换为 UNIX 时间并将其转换回具有您所需格式的日期。

于 2012-07-18T15:08:28.063 回答
0

正如其他人所解释的那样,这是不可能的,但这是替代解决方案,它需要进行一些调整,但它的工作方式类似于日期列。

我开始思考,如何让格式化成为可能。我有个主意。为它做触发器怎么样?我的意思是,添加 type 列char,然后使用 MySQL 触发器更新该列。那行得通!我做了一些与触发器相关的研究,最后提出了这些查询:

CREATE TRIGGER timestampper BEFORE INSERT ON table
FOR EACH
ROW SET NEW.timestamp = DATE_FORMAT(NOW(), '%d/%m/%Y');
CREATE TRIGGER timestampper2 BEFORE UPDATE ON table
FOR EACH
ROW SET NEW.timestamp = DATE_FORMAT(NOW(), '%d/%m/%Y');

您不能使用TIMESTAMPorDATE作为列类型,因为它们有自己的格式,并且会自动更新。

所以,这是您的替代时间戳或日期替代方案!希望这会有所帮助,至少我很高兴我得到了这个工作。

于 2014-01-24T17:13:04.410 回答
0

迟到的答案:

这个问题令人困惑,因为日期类型列的格式通常为 YYYY-MM-DD,但我想我理解 OP 想问的问题:

他在字符串列中有日期,可能是 VARCHAR 或 CHAR 或 TEXT 类型,年月日用斜杠分隔,而不是连字符 (YYYY/MM/DD),并希望创建一个日期列,格式为日期(日/月/年)。

然后会这样,他可以在表中创建一个新列并使用以下事务来创建新格式

UPDATE table SET `new_date_column`=
CONCAT(
   -- the day
   (SELECT SUBSTRING_INDEX(`old_date_column`,'/',-1)),
   "/",
   -- the month
   (SELECT SUBSTRING_INDEX((SELECT SUBSTRING_INDEX(`old_date_column`,'/',2)),'.',-1)),
   "/",
   -- the year
   (SELECT SUBSTRING_INDEX(`old_date_column`,'/',1))
) 
WHERE 1;
于 2021-11-21T22:13:19.233 回答