mysql工作台错误:语法错误,意外的单引号

eqfvzcg8  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(304)

我试着用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:42pm”(单引号文本)
我不知道如何解决这个问题,表存在,我已经成功地获得了其他信息使用语句,如 SELECT activityid=2 FROM .scheudling 我想我有两个问题,任何一个答案都可以。
在我的php文档中,如何将从android studio截取的字符串转换为日期(我得到了正确的变量 $start=$_Post("start") ,这样就行了,但我不能把它转换成时间。我上网看了看,试了所有看起来有用的东西。
通过sql代码转换,我已经试过了 CAST 以及 CONVERT ,两者都不起作用。我的起始列是类型 TIME(6) .

mzsu5hc0

mzsu5hc01#

我建议使用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指示器的字符串返回时间值

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-迄今为止
的格式模式 STR_TO_DATE 记录在这里,在 DATE_FORMAT :
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-格式
后续行动
演示:
设置

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语句

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

第二次随访
使用相同的 sql_mode op报告的设置:

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_DATEsql_mode .

相关问题