我试图在PHP中创建一个SQL语句,将字符串转换为时间(6)。但是在过去的12个小时里,我已经尝试了所有的东西,并没有取得进展。我试过这些语句,都会产生同样的错误。
UPDATE scheduling SET start='03:42PM' WHERE activityid=2;
UPDATE scheduling SET start=CONVERT(TIME(6),'03:42PM');
INSERT INTO scheduling(start) VALUES (start=CONVERT(TIME(6),'03:42PM'));
INSERT INTO scheduling(start) VALUES (start=CONVERT(TIME(6),'03:42PM'));
INSERT INTO scheduling(start) VALUES (start=CONVERT(TIME(6),'15:42'));
错误是
语法错误:意外' 03:42 PM'(单引号文字)"
我不知道如何修复此问题,表存在,并且我使用SELECT activityid=2 FROM xxxxxx.scheudling
我想我有两个问题,答案是否有效。
在我的PHP文档中,如何将从Android Studio排序中获取的字符串转换为日期。 (我使用$start=$_Post("start")
正确获取变量,这样就可以了,但我无法将其转换为时间。我在线查看,并尝试了所有看似合作的内容。
通过SQL代码进行转换,我已经尝试CAST
和CONVERT
,但都不起作用。我的开始列是TIME(6)
类型。
答案 0 :(得分:0)
我建议使用SELECT语句测试表达式。
首先,MySQL CONVERT
函数参数向后翻转。
语法为CONVERT(expr,type)
并且type
作为关键字提供,而不是字符串文字。例如:
SELECT CONVERT('235',SIGNED)
转换为TIME
数据类型
SELECT CONVERT( '15:42' ,TIME(6)) // => 15:42:00.000000
字符串文字的'PM'部分将被忽略。
SELECT CONVERT( '03:42PM' ,TIME(6)) // => 03:42:00.000000
我们可以使用STR_TO_DATE
函数从包含AM / PM指示符的字符串返回TIME值
SELECT STR_TO_DATE( '03:42PM' ,'%h:%i%p')
并且没有必要将其强制转换为TIME(6)
,我们可以这样做:
UPDATE scheduling
SET start = STR_TO_DATE( '03:42PM' ,'%h:%i%p')
WHERE activityid = 2
此处记录了STR_TO_DATE
函数:
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_str-to-date
此处记录了STR_TO_DATE
的格式模式,位于DATE_FORMAT
:
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
<强>后续强>
演示:
设置
USE test;
CREATE TABLE scheduling (activityid INT PRIMARY KEY, start TIME(6));
-- 0 row(s) affected
INSERT INTO scheduling (activityid) VALUES (2);
-- 1 row(s) affected
在上面的答案中执行更新语句
UPDATE scheduling SET start = STR_TO_DATE( '03:42PM' ,'%h:%i%p') WHERE activityid = 2 ;
-- 1 row(s) affected
结果
SELECT * FROM scheduling WHERE activityid = 2;
-- activityid start
-- ---------- ---------------
-- 2 15:42:00.000000
第二次跟进
使用OP报告的相同sql_mode
设置:
SET @@sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
测试:
SELECT STR_TO_DATE( '03:42PM' ,'%h:%i%p')
返回
(NULL)
但是这个更复杂的表达方式:
SELECT TIME(STR_TO_DATE(CONCAT(CURRENT_DATE(),' ', '03:42PM' ),'%Y-%m-%d %h:%i%p'))
返回
15:42:00
更复杂的表达式是避免STRICT_TRANS_TABLES
中NO_ZERO_DATE
和sql_mode
强加的行为的解决方法。