このディレクトリの索引
http://pc11.2ch.net/test/read.cgi/db/1252492296/500
#  MYSQLなんですけど 
#   
#  date      data 
#  2010/01/01 hoge1 
#  2010/01/05 hoge2 
#   
#  みたいなテーブルから 
#   
#  2010/01/01 hoge1 
#  2010/01/02 NULL 
#  2010/01/03 NULL 
#  2010/01/04 NULL 
#  2010/01/05 hoge2 
#   
#  のような結果の出せるSQLを求めてます。 
#   
#  select * from table between date '2010/01/01' and '2010/01/05' 
#   
#  とするとデータのある2レコードしか出ないのですが、 
#  データがない部分も日付を出しつつ、デフォルトのデータないよっていう文字列を出せると助かります。 
#   
#  お助けください! 
#   

'データがない部分も日付を出しつつ、デフォルトのデータないよっていう文字列を出す'(_日付下限,_日付上限) :-
        入力された日付を年、月、日整数に変換(_日付下限,_年下限整数,_月下限整数,_日下限整数),
        入力された日付を年、月、日整数に変換(_日付上限,_年上限整数,_月上限整数,_日上限整数),
        日付の生成(_年下限整数,_月下限整数,_日下限整数,_年整数,_月整数,_日整数,_年上限整数,_月上限整数,_日上限整数),
        swritef(_date,'%4r/%2r/%2r',[_年整数,_月整数,_日整数]),
        生成日付のtableの組を表示する(_date),
        (_年整数,_月整数,_日整数) = (_年上限整数,_月上限整数,_日上限整数).

入力された日付を年、月、日整数に変換(_日付文字列,_年整数,_月整数,_日整数) :-
        split(_日付文字列,['/'],[_年整数,_月整数,_日整数]).

生成日付のtableの組を表示する(_date) :-
        table(_date,_data),
        write_formatted('%t %t\n',[_date,_data]),!.
生成日付のtableの組を表示する(_生成された日付) :-
        \+(table(_date,_)),
        writef('%t %t\n',[_date,'NULL']),!.

日付の生成(_年整数,_月整数,_日整数,_年整数,_月整数,_日整数,_年上限整数,_月上限整数,_日上限整数),
        (_年整数,_月整数,_日整数) @=< (_年上限整数,_月上限整数,_日上限整数).
日付の生成(_年下限整数,_月下限整数,_日下限整数,_年整数,_月整数,_日整数,_年上限整数,_月上限整数,_日上限整数) :-
        (_年整数,_月整数,_日整数) @=< (_年上限整数,_月上限整数,_日上限整数),
        翌日(_年整数,_月整数,_日整数,_翌日の年整数,_翌日の月整数,_翌日の日整数),
        日付の生成(翌日の年整数,_翌日の月整数,_翌日の日整数,_年整数,_月整数,_日整数,_年上限整数,_月上限整数,_日上限整数).

翌日(_翌日の年整数,1,31,_翌日の年整数,2,1) :- !.
翌日(_翌日の年整数,3,31,_翌日の年整数,4,1) :- !.
翌日(_翌日の年整数,4,30,_翌日の年整数,5,1) :- !.
翌日(_翌日の年整数,5,31,_翌日の年整数,6,1) :- !.
翌日(_翌日の年整数,6,30,_翌日の年整数,7,1) :- !.
翌日(_翌日の年整数,7,31,_翌日の年整数,8,1) :- !.
翌日(_翌日の年整数,8,31,_翌日の年整数,9,1) :- !.
翌日(_翌日の年整数,9,30,_翌日の年整数,10,1) :- !.
翌日(_翌日の年整数,10,31,_翌日の年整数,11,1) :- !.
翌日(_翌日の年整数,11,30,_翌日の年整数,12,1) :- !.
翌日(_翌日の年整数,2,28,_翌日の年整数,3,1) :- \+(うるう年(_翌日の年整数)),!.
翌日(_翌日の年整数,2,29,_翌日の年整数,3,1) :- うるう年(_翌日の年整数),!.
翌日(_年整数,12,31,_翌日の年整数,1,1) :-
        _翌日の年整数 is _年整数 + 1,!.
翌日(_翌日の年整数,_翌日の月整数,_日整数,_翌日の年整数,_翌日の月整数,_翌日の日整数) :-
        _翌日の日整数 is _日整数 + 1,!.