2016-03-31 8 views
2
sql = "select scn,name,imp_flg,cg_desc from" 
        +" (select vesvoy.scn, vessel.name,'I' as imp_flg,cargotype.description as cg_desc from vesvoy" 
        +" join vessel on vesvoy.vessel_id = vessel.id " 
        +" join vesvoy_mf on vesvoy.id = vesvoy_mf.id_1" 
        +" join mf_bl on vesvoy_mf.id_2 = mf_bl.id_1" 
        +" join bl on mf_bl.id_2 = bl.id " 
        +" join blitem on blitem.master_id = bl.id" 
        +" join cargotype on blitem.cg_type_id = cargotype.id" 
        + " where bl.inv_flg<>'1' and year(vesvoy.exp_arr_dt_tm) in year(CURRENT_TIMESTAMP) , year(CURRENT_TIMESTAMP)-1" 
        +" union" 
        +" select vesvoy.scn, vessel.name,'E' as imp_flg,cargotype.description as cg_desc" 
        +" from vesvoy" 
        +" join vessel on vesvoy.vessel_id = vessel.id " 
        +" join vesvoy_so on vesvoy.id = vesvoy_so.id_1" 
        +" join so_sso on vesvoy_so.id_2 = so_sso.id_1" 
        +" join sso on so_sso.id_2 = sso.id " 
        +" join ssoitem on ssoitem.master_id = sso.id" 
        +" join cargotype on ssoitem.cg_type_id = cargotype.id" 
        + " where sso.inv_flg<>'1' and year(vesvoy.exp_arr_dt_tm) in year(CURRENT_TIMESTAMP) , year(CURRENT_TIMESTAMP)-1) as a "; 

上記のクエリを実行しました。最新の年をSQLで取得する方法

予期しないトークン "年(CURRENT_TIMESTAMP)が、今年は" 次 見つかったことを言って

エラー "oy.exp_arr_dt_tm)で。期待トークンが含まれる。SQLSTATE = 42601"

+0

ヒント:この複雑さのクエリでは問題はありませんが、現在の日付前年度は 'exp_arr_dt_tm'のインデックスの恩恵を受けません。実際の日付範囲を計算し、 'vesvoy.exp_arr_dt_tm> = @StartDateとvesvoy.exp_arr_dt_tm <= @ EndDate'をチェックすると、[SARGABLE](https://en.wikipedia.org/wiki/Sargable)になります。 – HABO

答えて

2

あなたはSQL ServerでIN

sql = "select scn,name,imp_flg,cg_desc from" 
       +" (select vesvoy.scn, vessel.name,'I' as imp_flg,cargotype.description as cg_desc from vesvoy" 
       +" join vessel on vesvoy.vessel_id = vessel.id " 
       +" join vesvoy_mf on vesvoy.id = vesvoy_mf.id_1" 
       +" join mf_bl on vesvoy_mf.id_2 = mf_bl.id_1" 
       +" join bl on mf_bl.id_2 = bl.id " 
       +" join blitem on blitem.master_id = bl.id" 
       +" join cargotype on blitem.cg_type_id = cargotype.id" 
       + " where bl.inv_flg<>'1' and year(vesvoy.exp_arr_dt_tm) in (year(CURRENT_TIMESTAMP) , year(CURRENT_TIMESTAMP)-1)" 
       +" union" 
       +" select vesvoy.scn, vessel.name,'E' as imp_flg,cargotype.description as cg_desc" 
       +" from vesvoy" 
       +" join vessel on vesvoy.vessel_id = vessel.id " 
       +" join vesvoy_so on vesvoy.id = vesvoy_so.id_1" 
       +" join so_sso on vesvoy_so.id_2 = so_sso.id_1" 
       +" join sso on so_sso.id_2 = sso.id " 
       +" join ssoitem on ssoitem.master_id = sso.id" 
       +" join cargotype on ssoitem.cg_type_id = cargotype.id" 
       + " where sso.inv_flg<>'1' and year(vesvoy.exp_arr_dt_tm) in (year(CURRENT_TIMESTAMP) , year(CURRENT_TIMESTAMP)-1) as a" 
2

ために括弧を定義する必要があり、現在の日時があるのcalle GetDate()によってd。また、INを使用する場合、リストはかっこで囲む必要があります。

and year(vesvoy.exp_arr_dt_tm) in (year(GETDATE()) , year(GETDATE())-1) 
+0

SQL Serverで 'CURRENT_TIMESTAMP'を使うことができます – sqluser

関連する問題