2016-04-14 18 views
0

私はPythonで書かれたMySQLのクエリを日付範囲をチェックしています。コマンドは次のようである:Python MySQLの日付形式

私は、このコマンドを実行すると、MySQLはこれ Incorrect date value: '1997' for column 'date' at row 1

を返す、式のように日付文字列を解釈するよう date_startdate_end2014-04-13

ような日付文字列の変数であり、今、それはそう

""" 
SELECT <something> 
FROM <a_table> 
WHERE datekey BETWEEN (SELECT date_key 
         FROM `date_table` WHERE date={date_start}) 
       AND (SELECT date_key 
        FROM `date_table` WHERE date={date_end}) 
""".format(date_start=date_start, date_end=date_end) 

1997 = 2014 - 4 - 13

これは私の考え方です。

は、私は生の文字列としての文字列を渡したいが、私はそうやって失敗しました

文字列として変数を渡す方法があります(私は「「Rを使用してみました」とU」)?

+2

この '日付=「{DATE_START}」' –

+0

男のように引用符を追加...同じ結果を得ますこれを試して....ありがとう.....それは働いた – JChao

答えて

1

日付リテラルの周りに一重引用符がないようです。

SELECT 2016 - 4 - 13 

SELECT 2016 + -4 + -13 

MySQLを見ることを得るために:

MySQLは

SELECT 2016-04-13  --> 1999, numeric value returned by expression 
MySQLが同じように見ている

、これは見るであろう減算動作として「裸」ダッシュ文字を見に行きますさリテラル日付の場合は、一重引用符で囲みます

SELECT '2016-04-13'      --> a string literal (VARCHAR) 

SELECT '2016-04-13' + INTERVAL 0 DAY --> a DATE value 

SELECT DATE('2016-04-13')    --> a DATE value returned by a function 

ここで、MySQLはD ATEまたはDATETIMEの場合、MySQLはDATEまたはDATETIMEに文字列リテラルを解釈(または暗黙的に変換)し、結果が有効なDATEまたはDATETIME値でない場合はNULLを返すか、エラーをスローします)。

MySQLがDATEまたはDATETIMEを期待するコンテキストで暗黙的に数値リテラルを変換します。

SELECT DATE(20160413)    --> DATE value 

SELECT 20160413 + INTERVAL 0 DAY  --> DATE value 

私はそのことに頼る者は誰も知らない。リテラルは、単一引用符で囲まれているとき、私たちは、私はしませんでした信じることができない....

SELECT DATE('20160413')    --> DATE value 

SELECT '20160413' + INTERVAL 0 DAY  --> DATE value