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

タイプに設定しない限り、このクエリはブログ ID の値を保存しstart_dateません。end_date9varchar

timestampand で試してみましdate 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''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 日時リテラルではありません。2 つのオプションがあります (好みのあいまいな順序で、要件の詳細情報はありません)。

  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 に答える