このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1316769778/638
#  mysql 5.5.10 
#   
#  table hogehoge  
#  inputdate     data1     data2    data3 
#  2012-02-16    ssssss    wwwww    yyyyyy 
#  2012-02-17    xxxxxx    xxxxx    xxxxx 
#  2012-02-18      null    aaaaa    vvvvv 
#  2012-02-19      null    null      null 
#  2012-02-20      null    null      null 
#  2012-02-21      null    null      null 
#  2012-02-22    xxxxxx    ccccc    fffff 
#   
#  とある時に、指定日の前日のデータが欲しい 
#  例でいうなら 
#  data1について、 
#  2012-02-17を指定することによって2012-02-16のssssssを、 
#  2012-02-22の日付を指定して2012-02-17のxxxxxxが得られ 
#  るようにしたいのですが。 
#   
#   よろしくお願いします 
# 

指定日の前日のデータが欲しい(_指定日,_指定日の前日,_data1,_data2,_data3) :-
        指定日の前日(_指定日,_指定日の前日),
        hogehoge(_指定日の前日,_data1,_data2,_data3).

指定日の前日(_指定日,_指定日の前日) :-
        指定日から年取得(_指定日,_年),
        指定日から月取得(_指定日,_月),
        指定日から日取得(_指定日,_日),
        指定日の前日(_年,_月,_日,_指定日の前日).

指定日の前日(_年,'01','01',_指定日の前日) :-
        前年(_年,_前年),
        atomic_list_concat([_前年,-,'12',-,'31'],_指定日の前日),!.
指定日の前日(_年,_月,'01',_指定日の前日) :-
        member(_月,['05','07','08','10','12']),
        前月(_月,_前月),
        atomic_list_concat([_年,-,_前月,-,'30'],_指定日の前日),!.
指定日の前日(_年,_月,'01',_指定日の前日) :-
        member(_月,['02','04','06','09','11']),
        前月(_月,_前月),
        atomic_list_concat([_年,-,_前月,-,'31'],_指定日の前日),!.
指定日の前日(_年,'03','01',_指定日の前日) :-
        atom_to_term(_年,_年整数,_),
        うるう年(_年整数),
        atomic_list_concat([_年,-,'02',-,'29'],_指定日の前日),!.
指定日の前日(_年,'03','01',_指定日の前日) :-
        atom_to_term(_年,_年整数,_),
        \+(うるう年(_年整数)),
        atomic_list_concat([_年,-,'02',-,'28'],_指定日の前日),!.
指定日の前日(_年,_月,_日,_指定日の前日) :-
        二桁日文字列の前日文字列(_日,_前日文字列),
        atomic_list_concat([_年,-,_月,-,_前日文字列],_指定日の前日).

指定日から年取得(_指定日,_年) :-
        sub_atom(_指定日,0,4,_,_年).

指定日から月取得(_指定日,_月) :-
        sub_atom(_指定日,5,2,_,_月).

指定日から日取得(_指定日,_日) :-
        sub_atom(_指定日,8,2,_,_日).

前年(_年,_前年) :-
        atom_to_term(_年,_年整数),
        _前年整数 is _年整数 - 1,
        swritef(_前年,'%t',[_前年整数]).

前月('12','11').
前月('11','10').
前月('10','09').
前月('09','08').
前月('08','07').
前月('07','06').
前月('06','05').
前月('05','04').
前月('04','03').
前月('03','02').
前月('02','01').

二桁日文字列の前日文字列('31','30').
二桁日文字列の前日文字列('30','29').
二桁日文字列の前日文字列('29','28').
二桁日文字列の前日文字列('28','27').
二桁日文字列の前日文字列('27','26').
二桁日文字列の前日文字列('26','25').
二桁日文字列の前日文字列('25','24').
二桁日文字列の前日文字列('24','23').
二桁日文字列の前日文字列('23','22').
二桁日文字列の前日文字列('22','21').
二桁日文字列の前日文字列('21','20').
二桁日文字列の前日文字列('20','19').
二桁日文字列の前日文字列('19','18').
二桁日文字列の前日文字列('18','17').
二桁日文字列の前日文字列('17','16').
二桁日文字列の前日文字列('16','15').
二桁日文字列の前日文字列('15','14').
二桁日文字列の前日文字列('14','13').
二桁日文字列の前日文字列('13','12').
二桁日文字列の前日文字列('12','11').
二桁日文字列の前日文字列('11','10').
二桁日文字列の前日文字列('10','09').
二桁日文字列の前日文字列('09','08').
二桁日文字列の前日文字列('08','07').
二桁日文字列の前日文字列('07','06').
二桁日文字列の前日文字列('06','05').
二桁日文字列の前日文字列('05','04').
二桁日文字列の前日文字列('04','03').
二桁日文字列の前日文字列('03','02').
二桁日文字列の前日文字列('02','01').

うるう年(_年) :-
        0 is _年 mod 400,!.
うるう年(_年) :-
        0 is _年 mod 100,!,
        fail.
うるう年(_年) :-
        0 is _年 mod 4,!.
うるう年(_年) :-
        \+(0 is _年 mod 4),
        fail.