MySQL - 我的月份当前存储为 0-11

标签 mysql perl datetime-format

我以为我遇到了 MySQL 5.1 的错误,但该错误出现在创建时间戳的 Perl 代码中。 Perl 的本地时间使用 0-11 表示月份,但 MySQL 的日期时间使用 1-12。所以,我有所有这些格式错误的时间戳需要更新。

2012-00-19 09:03:30

这应该是:

2012-01-19 09:03:30

问题是 MySQL 的日期函数在 00 月返回 NULL。 MySQL 有没有办法做到这一点?

编辑:解决方案=

 UPDATE test_stats 
 SET start_time = CAST(CONCAT(SUBSTRING(start_time, 1, 5), 
                       CAST((CAST(SUBSTRING(start_time, 6, 2) AS UNSIGNED) + 1) AS CHAR(2)),
                       SUBSTRING(start_time, 8, 12)) AS DATETIME);

顺便说一句,我使用的是 MySQL 5.1

最佳答案

这应该有效:

UPDATE MyTable
SET DateTimeField = 
    CAST (
     SUBSTRING(DateTimeString, 1, 5) -- '2012-'
   + CAST((CAST(SUBSTRING(DateTimeString, 6, 2) AS INT) + 1) AS VARCHAR) -- '00' => '1'
   + SUBSTRING(DateTimeString, 8, 12) -- '-19 09:03:30'
   AS DATETIME)

使用此选择进行测试

DECLARE @x VARCHAR(50) = '2012-00-19 09:03:30'

SELECT CAST(SUBSTRING(@x, 1, 5) 
     + CAST((CAST(SUBSTRING(@x, 6, 2) AS INT) + 1) AS VARCHAR) 
     + SUBSTRING(@x, 8, 12) AS DATETIME)

关于MySQL - 我的月份当前存储为 0-11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8931106/

相关文章:

c# - 为什么 DateTime.ToString 没有按预期提供时区

c# - DateTime.TryParseExact() 由于线程的文化信息而失败

php - 在 PHP 中运行 MySQL *.sql 文件

mysql - Ansible角色: MySQL unable to read configuration file

mysql - 我需要将当前有 10 亿条记录的数据库的数据类型从 float 更改为十进制

perl - 在perl中将64位值转换为32位值

php - 如何在 PHP 中将 ISO8601 日期转换为另一种格式?

php - 允许 $wpdb mysql 查询处理特定的 WordPress 类别

jquery - 如何使用 jQuery 模糊事件向 Perl 脚本发出 AJAX 请求?

c++ - 使用 SWIG 为 perl 创建 C++ 接口(interface)?