Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拆分日期和时间,然后将它们转移到各自的新列中_Php_Sql - Fatal编程技术网

Php 拆分日期和时间,然后将它们转移到各自的新列中

Php 拆分日期和时间,然后将它们转移到各自的新列中,php,sql,Php,Sql,我有一个网站,有一个日期和时间结合在会议开始和结束 会议开始 2019-04-26 11:39:15 我已经为日期和时间创建了新列。如何拆分现有日期和时间,然后将它们转移到各自的新列 另外,我正在寻找SQL代码。您只需使用mySQL中可用的日期和时间函数即可 set @d='2019-04-26 11:39:15'; select date(@d),time(@d); 将输出 +------------+----------+ | date(@d) | time(@d) | +------

我有一个网站,有一个日期和时间结合在会议开始和结束

会议开始 2019-04-26 11:39:15

我已经为日期和时间创建了新列。如何拆分现有日期和时间,然后将它们转移到各自的新列


另外,我正在寻找SQL代码。

您只需使用mySQL中可用的日期和时间函数即可

set @d='2019-04-26 11:39:15';
select date(@d),time(@d);
将输出

+------------+----------+
| date(@d)   | time(@d) |
+------------+----------+
| 2019-04-26 | 11:39:15 |
+------------+----------+
假设现有列名为
meeting\u start
,并且有一个名为
table
的表,那么您就可以这样做了

update `TABLE` set `date_col`=date( `meeting_start` ), `time_col`=time( `meeting_start` );

用于说明如何更新新字段的简单表架构

mysql> describe `so_datetime_fudge`;
+--------------------+------------------+------+-----+---------+----------------+
| Field              | Type             | Null | Key | Default | Extra          |
+--------------------+------------------+------+-----+---------+----------------+
| id                 | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name               | varchar(50)      | YES  |     | NULL    |                |
| meeting_start      | datetime         | YES  |     | NULL    |                |
| meeting_start_date | date             | YES  |     | NULL    |                |
| meeting_start_time | time             | YES  |     | NULL    |                |
+--------------------+------------------+------+-----+---------+----------------+
包含3行虚拟数据的表快照

mysql> select * from so_datetime_fudge;
+----+-----------------------+---------------------+--------------------+--------------------+
| id | name                  | meeting_start       | meeting_start_date | meeting_start_time |
+----+-----------------------+---------------------+--------------------+--------------------+
|  1 | The First of Too Many | 2019-05-27 16:48:30 | NULL               | NULL               |
|  2 | Holy Cow Batman       | 2019-05-27 16:54:56 | NULL               | NULL               |
|  3 | The End is Nigh       | 2019-05-27 16:55:22 | NULL               | NULL               |
+----+-----------------------+---------------------+--------------------+--------------------+
然后运行此查询:

update `so_datetime_fudge` set `meeting_start_date`=date( `meeting_start` ), `meeting_start_time`=time( `meeting_start` );
更新后运行相同的SELECT查询

mysql> select * from so_datetime_fudge;
+----+-----------------------+---------------------+--------------------+--------------------+
| id | name                  | meeting_start       | meeting_start_date | meeting_start_time |
+----+-----------------------+---------------------+--------------------+--------------------+
|  1 | The First of Too Many | 2019-05-27 16:48:30 | 2019-05-27         | 16:48:30           |
|  2 | Holy Cow Batman       | 2019-05-27 16:54:56 | 2019-05-27         | 16:54:56           |
|  3 | The End is Nigh       | 2019-05-27 16:55:22 | 2019-05-27         | 16:55:22           |
+----+-----------------------+---------------------+--------------------+--------------------+
但是,如果您创建了表的视图,您可以按照自己的方式构造它,并且基础数据保持不变

CREATE VIEW `vw_datetime_fudge` AS select 
    `id`, 
    `name`, 
    date( `meeting_start` ) as `meeting_start_date`, 
    time( `meeting_start` ) as `meeting_start_time` 
from `so_datetime_fudge`;


mysql> select * from `vw_datetime_fudge`;
+----+-----------------------+--------------------+--------------------+
| id | name                  | meeting_start_date | meeting_start_time |
+----+-----------------------+--------------------+--------------------+
|  1 | The First of Too Many | 2019-05-27         | 16:48:30           |
|  2 | Holy Cow Batman       | 2019-05-27         | 16:54:56           |
|  3 | The End is Nigh       | 2019-05-27         | 16:55:22           |
+----+-----------------------+--------------------+--------------------+

您可以使用
DateTime::format
方法

$date = new DateTime('2019-04-26 11:39:15');
$timeString = $date->format('H:i:s');
$dateString = $date->format('Y-m-d');

最佳答案:不要这样做。保持时间戳的精确性。如果您需要以这种方式查看数据,请使用@RamRaider给出的建议。如果我错了,请纠正我。我被要求在报告中分开日期和时间,所以我创建了新的列date和time,然后计划提取所有记录,然后将它们放到新列中。请阅读下面的评论,如果您想单独查看时间和日期,请使用视图。通常,将日期和时间存储在单独的列中是不好的做法(原因很多)。谢谢!但实际上我已经保存了很多现有的datetime。有一种方法可以一次性完成吗?是的,更新问题以包括表架构-不知道列名(除了
meeting\u start
)很难说。。。但是,就像Tim Biegeleisen所说的-为什么会这样。。。只要SQL代码不起作用,您就可以随时使用数据视图来显示组成部分。它说要检查与您的mySQL服务器版本对应的手册。。我使用的是btw版本5.5.62 UbuntuHi@RamRaider。我再次尝试了它,但只有第th-date列得到了更新。如果您不希望添加表模式,那么这是任何人的猜测。您现在正在尝试什么查询??
2019-04-26<br>
11:39:15<br>
$date = new DateTime('2019-04-26 11:39:15');
$timeString = $date->format('H:i:s');
$dateString = $date->format('Y-m-d');