UPDATE blogs SET start_date = '11/27/2012 00:00',end_date = '11/27/2012 00:00' WHERE id='9'
除非我将它们设置为类型,否则此查询不会存储博客 ID 的值start_date
。end_date
9
varchar
尝试过timestamp
,date time
但查询总是会返回受影响的 0 行
问题是我需要能够在一段时间内检查行,而使用 varchar 它会变得非常复杂。
我错过了什么?
试试这个:
UPDATE blogs
SET start_date = STR_TO_DATE('11/27/2012 00:00', '%m/%d/%Y %h:%i:%s') --cast string to date in correct date format
,end_date = STR_TO_DATE('11/27/2012 00:00', '%m/%d/%Y %h:%i:%s')--cast string to date in correct date format
WHERE id = 9 --removed quotes as this field's probably numeric
如果使用时间戳列而不是日期时间,我认为您需要执行以下操作:
UPDATE blogs
SET start_date = UNIX_TIMESTAMP(STR_TO_DATE('11/27/2012 00:00', '%m/%d/%Y %h:%i:%s'))
,end_date = UNIX_TIMESTAMP(STR_TO_DATE('11/27/2012 00:00', '%m/%d/%Y %h:%i:%s'))
WHERE id = 9
如日期和时间文字中所述:
MySQL以这些格式识别
DATETIME
和重视:TIMESTAMP
作为一个
'YYYY-MM-DD HH:MM:SS'
或'YY-MM-DD HH:MM:SS'
格式的字符串。这里也允许使用“宽松”的语法:任何标点符号都可以用作日期部分或时间部分之间的分隔符。例如,'2012-12-31 11:30:45'
、'2012^12^31 11+30+45'
、'2012/12/31 11*30*45'
和'2012@12@31 11^30^45'
是等价的。作为在任何一种格式中都没有分隔符的
'YYYYMMDDHHMMSS'
字符串'YYMMDDHHMMSS'
,前提是该字符串作为日期有意义。例如,'20070523091528'
and'070523091528'
被解释为'2007-05-23 09:15:28'
, 但是'071122129015'
是非法的(它有一个无意义的微小部分)并且变成'0000-00-00 00:00:00'
.作为任一
YYYYMMDDHHMMSS
格式YYMMDDHHMMSS
的数字,前提是该数字作为日期有意义。例如19830905132800
和830905132800
被解释为'1983-09-05 13:28:00'
。
因此,字符串'11/27/2012 00:00'
和'11/27/2012 00:00'
不是有效的 MySQL 日期时间文字。您有两种选择(以某种模糊的偏好顺序,没有您的要求的任何进一步信息):
以可识别的格式提供您的文字:
UPDATE blogs SET
start_date = '2012-11-27 00:00:00',
end_date = '2012-11-27 00:00:00'
WHERE id = 9
使用 MySQL 的STR_TO_DATE()
函数来转换字符串:
UPDATE blogs SET
start_date = STR_TO_DATE('11/27/2012 00:00', '%m/%d/%Y %H:%i'),
end_date = STR_TO_DATE('11/27/2012 00:00', '%m/%d/%Y %H:%i')
WHERE id = 9