雖然試圖執行我的Python腳本,我面對這些類型轉換錯誤:字符串/ Int的類型鑄造日期蟒蛇
historical_start_date = '2015-12-01'
historical_end_date = '2015-12-31'
caldate = 2015-12-10 ## this is date type
sql_str = """SELECT ART_TYPE as ART_TYPE,
year(event_dt) * 100 + month(event_dt) as year_month,
sum(measured_quantity)
FROM <tablename>
WHERE EVENT_DT>=to_date('{1}','YYYY-MM-DD')"""
if historical_end_date > caldate.strftime('%Y-%m-%d'):
sql_str= sql_str+ " AND EVENT_DT<" +caldate.strftime('%Y-%m-%d')
else:
sql_str= sql_str+ " AND EVENT_DT <= to_date('{2}','YYYY-MM-DD') "
sql_str= sql_str+ """ GROUP BY ART_TYPE,year(event_dt) * 100 + month(event_dt)""".format(historical_start_date,historical_end_date)
在運行,我得到了以下錯誤:
('42883', '[42883] ERROR 4286: Operator does not exist: date < int\nHINT: No operator matches the given name and argument type(s). You may need to add explicit type casts\n (4286) (SQLExecDirectW)')
聽起來你要比較的日期與時間的'int'表示了'varchar'表示。確保您的數據類型匹配:將類型轉換爲其他類型。 – openwonk
在上面的代碼中,我嘗試使用caldate.strftime('%Y-%m-%d')將字符串caldate轉換爲字符串。這是正確的做法嗎?我嘗試了其他方法來使數據類型在「=」的兩側相等。你能提供一些轉換(語法)的例子:str,str到date,int到date –
@Adriano,我已經在整個sql_str的結尾給出了.format。我應該爲sql_str中的每個字符串添加format(),其中有一個參數{0}。另外我會嘗試按名稱使用{something} –