2016-03-31 2 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

Вам нужно определить скобки для 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

в SQL Server, текущий DateTime является калла d по GetDate(). Кроме того, при использовании IN, список должен быть заключен в скобках, так что это будет выглядеть как

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

Вы можете использовать 'CURRENT_TIMESTAMP' в SQL Server – sqluser

Смежные вопросы