0
UPDATE blogs SET start_date = '11/27/2012 00:00',end_date = '11/27/2012 00:00' WHERE id='9'

除非我将它们设置为类型,否则此查询不会存储博客 ID 的值start_dateend_date9varchar

尝试过timestampdate time但查询总是会返回受影响的 0 行

问题是我需要能够在一段时间内检查行,而使用 varchar 它会变得非常复杂。

我错过了什么?

4

2 回答 2

1

试试这个:

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
于 2012-11-13T18:47:44.600 回答
1

日期和时间文字中所述:

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的数字,前提是该数字作为日期有意义。例如19830905132800830905132800被解释为'1983-09-05 13:28:00'

因此,字符串'11/27/2012 00:00''11/27/2012 00:00'不是有效的 MySQL 日期时间文字。您有两种选择(以某种模糊的偏好顺序,没有您的要求的任何进一步信息):

  1. 以可识别的格式提供您的文字:

    UPDATE blogs SET
      start_date = '2012-11-27 00:00:00',
      end_date   = '2012-11-27 00:00:00'
    WHERE id = 9
    
  2. 使用 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
    
于 2012-11-13T19:25:50.653 回答