(57)【要約】【課題】桁位置によって取り得る値の範囲が異なるデータの減算処理の高速化を図る。【解決手段】演算装置１００は、被減算値データ１１０および減算値データ１２０をバイト単位で大小を比較する。演算装置１００は、比較結果に応じて、データ１１１〜１１８の桁情報から定まる繰り下がり値データ１３１〜１３８を、データ１１１〜１１８にそれぞれ加算する。演算装置１００は、桁位置が対応する、繰り下がり値データ１３１〜１３８が加算されたデータ１１１〜１１８から、データ１２１〜１２８をそれぞれ減算する。【選択図】図１
2015143949.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
被減算値データおよび減算値データを、１バイト単位でそれぞれ複数に分割し、
桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、
桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する、
処理を実行させることを特徴とする演算プログラム。
【請求項２】
前記コンピュータに、
桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置の値に該桁位置の値として取り得る値の個数を加算し、該桁位置に隣接する上位の桁位置の値から１を減算するための繰り下がり値データをそれぞれ生成する処理を実行させ、
前記加算する処理は、
桁位置が対応する、前記分割された被減算値データに、前記生成された繰り下がり値データをそれぞれ加算することを特徴とする請求項１に記載の演算プログラム。
【請求項３】
前記コンピュータに、
桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置の値に前記桁位置の値として取り得る値の個数を加算するための繰り下がり加算値データをそれぞれ生成し、
桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置に隣接する上位の桁位置の値から１を減算するための繰り下がり減算値データをそれぞれ生成する処理を実行させ、
前記繰り下がり値データを生成する処理は、
桁位置が対応する、前記繰り下がり加算値データおよび前記繰り下がり減算値データをそれぞれ加算することにより、前記繰り下がり値データをそれぞれ生成することを特徴とする請求項２に記載の演算プログラム。
【請求項４】
前記被減算値データおよび前記減算値データは、年、月、日、時、分および秒それぞれを示すバイト単位のデータを並べたＴＩＭＥＳＴＡＭＰ型データであることを特徴とする請求項１〜３のいずれか一つに記載の演算プログラム。
【請求項５】
前記被減算値データおよび前記減算値データは、時、分および秒それぞれを示すバイト単位のデータを並べたＴＩＭＥ型データであることを特徴とする請求項１〜３のいずれか一つに記載の演算プログラム。
【請求項６】
前記被減算値データおよび前記減算値データは、年、月および日それぞれを示すバイト単位のデータを並べたＤＡＴＥ型データであることを特徴とする請求項１〜３のいずれか一つに記載の演算プログラム。
【請求項７】
被減算値データおよび減算値データを、１バイト単位でそれぞれ複数に分割し、桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較する比較部と、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する演算部と、
を有することを特徴とする演算装置。
【請求項８】
コンピュータが、
被減算値データおよび減算値データを、１バイト単位でそれぞれ複数に分割し、
桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、
桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する、
処理を実行することを特徴とする演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算プログラム、演算装置および演算方法に関する。
【背景技術】
【０００２】
データベースシステムでは、高速かつ利便性の高いデータ操作が求められており、利用者が扱うデータの形に対応したデータ型という概念を使用して内部的にデータ形式を規定し、ディスクへの格納、データの比較、演算処理を実現している。データ型としては、例えば、日時や時刻を扱う型、数値を扱う型、文字を扱う型などがある。
【０００３】
関連する先行技術としては、イベントが発生した際に、基準日時と発生日時を用いて、発生日時が後であるほど得られる演算結果が小さくなるように、イベントレコードに日時変換演算を行って変換レコードに変換し、履歴情報データベースに格納する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−１４６５０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、日付や時刻を表すデータのように、桁位置によって取り得る値の範囲（値域）が異なるデータの減算処理に時間がかかる。例えば、桁位置によって値域が異なると、データの減算において、繰り下がりが生じる場合に、それぞれの桁位置に応じた繰り下がり処理が必要となる。この場合、例えば、ＯＳのアーキテクチャをそのまま利用することができず、ソフトウェア側で対応することになるため減算処理にかかる処理時間の増加を招いてしまう。
【０００６】
一つの側面では、本発明は、桁位置によって取り得る値の範囲が異なるデータの減算処理の高速化を図ることができる演算プログラム、演算装置および演算方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、被減算値データおよび減算値データを、１バイト単位でそれぞれ複数に分割し、桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する演算プログラム、演算装置および演算方法が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、桁位置によって取り得る値の範囲が異なるデータの減算処理の高速化を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかる演算方法の一実施例を示す説明図である。
【図２】図２は、データベースシステム２００のシステム構成例を示す説明図である。
【図３】図３は、データベースサーバ２０１のハードウェア構成例を示すブロック図である。
【図４】図４は、データベースサーバ２０１の機能的構成例を示すブロック図である。
【図５】図５は、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令の概要を示す説明図である。
【図６】図６は、ＴＩＭＥＳＴＡＭＰ型データのデータ形式を示す説明図である。
【図７】図７は、ＴＩＭＥＳＴＡＭＰ型データの演算処理例を示す説明図（その１）である。
【図８】図８は、ＴＩＭＥＳＴＡＭＰ型データの演算処理例を示す説明図（その２）である。
【図９】図９は、ＴＩＭＥＳＴＡＭＰ型データの演算処理例を示す説明図（その３）である。
【図１０】図１０は、ＴＩＭＥＳＴＡＭＰ型データの演算処理例を示す説明図（その４）である。
【図１１】図１１は、ＴＩＭＥＳＴＡＭＰ型データの演算処理例を示す説明図（その５）である。
【図１２】図１２は、ＴＩＭＥ型データのデータ形式を示す説明図である。
【図１３】図１３は、ＴＩＭＥ型データの演算処理例を示す説明図（その１）である。
【図１４】図１４は、ＴＩＭＥ型データの演算処理例を示す説明図（その２）である。
【図１５】図１５は、ＴＩＭＥ型データの演算処理例を示す説明図（その３）である。
【図１６】図１６は、ＴＩＭＥ型データの演算処理例を示す説明図（その４）である。
【図１７】図１７は、ＴＩＭＥ型データの演算処理例を示す説明図（その５）である。
【図１８】図１８は、ＤＡＴＥ型データのデータ形式を示す説明図である。
【図１９】図１９は、ＤＡＴＥ型データの演算処理例を示す説明図（その１）である。
【図２０】図２０は、ＤＡＴＥ型データの演算処理例を示す説明図（その２）である。
【図２１】図２１は、ＤＡＴＥ型データの演算処理例を示す説明図（その３）である。
【図２２】図２２は、ＤＡＴＥ型データの演算処理例を示す説明図（その４）である。
【図２３】図２３は、ＤＡＴＥ型データの演算処理例を示す説明図（その５）である。
【図２４】図２４は、データベースサーバ２０１の演算処理手順の一例を示すフローチャート（その１）である。
【図２５】図２５は、データベースサーバ２０１の演算処理手順の一例を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、本発明にかかる演算プログラム、演算装置および演算方法の実施の形態を詳細に説明する。
【００１１】
（演算方法の一実施例）
図１は、実施の形態にかかる演算方法の一実施例を示す説明図である。図１において、演算装置１００は、被減算値データから減算値データの減算を行うコンピュータである。ここで、被減算値データは、減算される値を示すデータである。減算値データは、減算する値を示すデータである。
【００１２】
被減算値データおよび減算値データは、日時や時刻を表すデータであり、それぞれ異なる意味を持つ数字を示すデータを並べたものである。例えば、被減算値データおよび減算値データは、ＴＩＭＥＳＴＡＭＰ型データ、ＴＩＭＥ型データ、ＤＡＴＥ型データなどである。
【００１３】
ＴＩＭＥＳＴＡＭＰ型データは、年、月、日、時、分および秒それぞれを示すデータを並べたものである。ＴＩＭＥ型データは、時、分および秒それぞれを示すデータを並べたものである。ＤＡＴＥ型データは、年、月および日それぞれを示すデータを並べたものである。
【００１４】
なお、ＴＩＭＥＳＴＡＭＰ型データ、ＴＩＭＥ型データおよびＤＡＴＥ型データのデータ形式についての詳細な説明は、図６、図１２および図１８を用いて後述する。
【００１５】
被減算値データの具体例としては、例えば、商品（食品）の賞味期限を示すデータが挙げられる。減算値データの具体例としては、例えば、商品の製造日時を示すデータが挙げられる。この場合、被減算値データから減算値データの減算を行うことで、賞味期限と製造日時との日時間隔を求めることができ、例えば、割引対象とする商品や陳列対象から除外する商品の判別などに役立てることができる。
【００１６】
ここで、日時や時刻を表すデータは、桁位置によって取り得る値の範囲（値域）が異なる。桁位置は、並べたデータの位置を示す。このため、日時や時刻を表すデータの減算においては、それぞれの桁位置に応じた繰り下がり処理が必要となる。繰り下がりとは、ある桁位置の減算される値が、減算する値よりも小さいとき、減算される値に、その桁位置の値として取り得る値の個数分加えた結果、隣接する上位の桁位置の値が１小さくなることである。
【００１７】
一例として、ＴＩＭＥＳＴＡＭＰ型データを例に挙げると、「時」を示すデータについては、「０〜２３」を値域として持つ。このため、１２時から１４時を減算する場合には、上位の桁位置の「日」を示すデータから、１日を繰り下げて（１を減算し）、１（日）×２４（時）＋１２（時）−１４（時）＝２２（時）と計算することになる。一方、「分」を示すデータになると、０〜５９を値域として持つため、「時」を示すデータとは異なる処理となる。
【００１８】
このように、日時や時刻を表すデータの減算においては、それぞれの桁位置に応じた繰り下がり処理が必要となるため、ＯＳのアーキテクチャをそのまま利用することができず、ソフトウェア側で対応することになる。ところが、例えば、日時や時刻を表すデータの桁位置ごとに、大小比較を繰り返し行って、繰り下がりに伴う減算および加算を繰り返し行うと、データの減算処理にかかるステップ数が増加してしまう。
【００１９】
そこで、本実施の形態では、演算装置１００は、被減算値データおよび減算値データを、１バイト単位でそれぞれ複数に分割し、桁位置が対応する、分割された被減算値データおよび分割された減算値データそれぞれの大小比較を一括して行う。これにより、日時や時刻を表すデータの各桁位置の大小比較にかかる処理ステップ数を削減するとともに、各桁位置に応じた繰り下がり処理や減算処理を並列実行可能にして、日時や時刻を表すデータの減算処理の高速化を図る。以下、演算装置１００の演算処理例について説明する。
【００２０】
（１）演算装置１００は、被減算値データ１１０および減算値データ１２０をバイト単位で大小を比較する。ここで、被減算値データ１１０および減算値データ１２０は、それぞれ８バイトのＴＩＭＥＳＴＡＭＰ型データである。ＴＩＭＥＳＴＡＭＰ型データは、年、月、日、時、分および秒それぞれを示すバイト単位のデータを並べたデータである。
【００２１】
より詳細に説明すると、被減算値データ１１０および減算値データ１２０の０バイト目は、ＮＵＬＬ  ｉｎｄを示す。ＮＵＬＬ  ｉｎｄは、データが不定であるか否かを識別する情報である。ＮＵＬＬ  ｉｎｄが「０」の場合はデータが不定ではないことを示し、ＮＵＬＬ  ｉｎｄが「１」の場合はデータが不定であることを示す。
【００２２】
また、１バイト目および２バイト目は「年」を示す。ここでは、「年」を西暦で表現するため、１バイト目が「ＨＩ年（年の上位２桁）」を示し、２バイト目が「ＬＯ年（年の下位２桁）」を示す。３バイト目は「月」を示す。４バイト目は「日」を示す。５バイト目は「時」を示す。６バイト目は「分」を示す。７バイト目は「秒」を示す。
【００２３】
具体的には、例えば、演算装置１００は、被減算値データ１１０および減算値データ１２０を、１バイト単位でそれぞれ複数に分割する。図１の例では、被減算値データ１１０が、１バイト単位のデータ１１１〜１１８に分割される。また、減算値データ１２０が、１バイト単位のデータ１２１〜１２８に分割される。
【００２４】
そして、演算装置１００は、桁位置が対応する、データ１１１〜１１８およびデータ１２１〜１２８それぞれの大小を比較する。より具体的には、例えば、演算装置１００は、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）  ＣＯＭＰＡＲＥ  命令により、桁位置が対応する、データ１１１〜１１８およびデータ１２１〜１２８それぞれの大小を一括比較する。
【００２５】
ここで、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令は、１命令で複数のデータの比較処理を同時に行うものである。ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令によれば、一つの命令で複数のデータの比較処理を一括して行うことができ処理性能の向上を図ることができる。ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令についての詳細な説明は、図５を用いて後述する。
【００２６】
（２）演算装置１００は、比較結果に応じて、データ１１１〜１１８の桁情報から定まる繰り下がり値データ１３１〜１３８を、データ１１１〜１１８にそれぞれ加算する。ここで、桁情報は、各データ１１１〜１１８に対応する桁位置の値として取り得る値の範囲（値域）を示す情報である。
【００２７】
例えば、データ１１２に対応する桁位置１の値として取り得る値の範囲は「０〜９９」である。また、データ１１４に対応する桁位置３の値として取り得る値の範囲は「１〜１２」である。また、データ１１７に対応する桁位置６の値として取り得る値の範囲は「０〜５９」である。
【００２８】
具体的には、例えば、演算装置１００は、桁位置に応じて、データ１１１〜１１８よりもデータ１２１〜１２８が大きくなる桁位置の値に該桁位置の値として取り得る値の個数を加算し、該桁位置に隣接する上位の桁位置の値から「１」を減算するための繰り下がり値データ１３１〜１３８をそれぞれ生成する。
【００２９】
図１の例では、データ１１４よりもデータ１２４が大きい。ここで、データ１１４に対応する桁位置３の値の範囲は「１〜１２」であり、桁位置３の値として取り得る値の個数は「１２」である。このため、演算装置１００は、桁情報を参照して、データ１１４に対応する桁位置３の値に「１２」を加算するための繰り下がり値データ１３４を生成する。また、演算装置１００は、データ１１４に対応する桁位置３に隣接する上位の桁位置２の値から「１」を減算するための繰り下がり値データ１３３を生成する。
【００３０】
また、データ１１６よりもデータ１２６が大きい。ここで、データ１１６に対応する桁位置５の値の範囲は「０〜２３」であり、桁位置５の値として取り得る値の個数は「２４」である。このため、演算装置１００は、桁情報を参照して、データ１１６に対応する桁位置５の値に「２４」を加算するための繰り下がり値データ１３６を生成する。また、演算装置１００は、データ１１６に対応する桁位置５に隣接する上位の桁位置４の値から「１」を減算するための繰り下がり値データ１３５を生成する。
【００３１】
また、演算装置１００は、桁位置３，５および桁位置３，５に隣接する上位の桁位置２，４とは異なる桁位置０，１，６，７に「０」を加算するための繰り下がり値データ１３１，１３２，１３７，１３８をそれぞれ生成する。
【００３２】
そして、演算装置１００は、桁位置が対応する、データ１１１〜１１８に、生成された繰り下がり値データ１３１〜１３８をそれぞれ加算する。図１の例では、例えば、データ１１３に繰り下がり値データ１３３が加算され、「ＬＯ年」が「１１」となる。また、例えば、データ１１４に繰り下がり値データ１３４が加算され、「月」が「１８」となる。
【００３３】
（３）演算装置１００は、桁位置が対応する、繰り下がり値データ１３１〜１３８が加算されたデータ１１１〜１１８から、データ１２１〜１２８をそれぞれ減算する。また、演算装置１００は、１バイト単位でそれぞれ減算した結果を結合する。この結果、被減算値データ１１０から減算値データ１２０を減算した結果を示す時間間隔データ１４０を取得することができる。
【００３４】
このように、実施の形態にかかる演算装置１００によれば、桁位置が対応する、１バイト単位で分割された被減算値データおよび分割された減算値データそれぞれの大小を一括して比較することができる。これにより、日時や時刻を表すデータの各桁位置の大小比較にかかる処理ステップ数を１回に削減することができる。また、１バイト単位の比較結果に応じて、各桁位置の繰り下がり処理および減算処理を並列に行うことが可能となる。
【００３５】
これらのことから、演算装置１００によれば、日付や時刻を表すデータのように、桁位置によって取り得る値の範囲が異なるデータの減算処理の高速化を図ることができる。
【００３６】
（データベースシステム２００のシステム構成例）
つぎに、実施の形態にかかるデータベースシステム２００のシステム構成例について説明する。ここでは、図１に示した演算装置１００をデータベースシステム２００内のデータベースサーバ２０１に適用する場合を例に挙げて説明する。
【００３７】
図２は、データベースシステム２００のシステム構成例を示す説明図である。図２において、データベースシステム２００は、データベースサーバ２０１と、クライアント装置２０２と、を含む。データベースシステム２００において、データベースサーバ２０１およびクライアント装置２０２は、有線または無線のネットワーク２１０を介して接続される。ネットワーク２１０は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、移動体通信網などである。
【００３８】
データベースサーバ２０１は、データベース２２０およびログ２３０にアクセス可能なコンピュータである。データベース２２０は、複数のアプリケーションや利用者により共有されるデータを記憶する。ログ２３０は、トランザクションの更新情報を記憶する。ログ２３０は、例えば、システムダウン等の異常時に、データベース２２０を復旧するために使用される。
【００３９】
クライアント装置２０２は、データベースシステム２００の利用者が使用するコンピュータである。クライアント装置２０２は、データベースサーバ２０１に対して、データベース２２０への検索要求または更新要求を行う。具体的には、例えば、クライアント装置２０２は、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、ノートＰＣ、タブレット型ＰＣ、スマートフォンなどである。
【００４０】
ここで、データベースサーバ２０１は、受付部２４１と、データ操作部２４２と、レコード操作部２４３と、バッファ管理部２４４と、トランザクション管理部２４５と、ログ管理部２４６と、データベースバッファ２４７と、を含む。
【００４１】
受付部２４１は、クライアント装置２０２から検索要求または更新要求を受け付ける。データ操作部２４２は、データベース定義情報を参照して、受付部２４１が受け付けた検索要求または更新要求に対応するデータ操作命令を解釈して実行する。レコード操作部２４３は、データベース２２０の検索や更新、ログの採取を行う。
【００４２】
バッファ管理部２４４は、レコード操作部２４３により要求されたレコードを含むデータベースバッファ２４７の情報を返却する。バッファ管理部２４４は、データベースバッファ２４７上に目的のレコードが存在しない場合は、データベース２２０から該当データを読み込み、データベースバッファ２４７上に展開する。データベースバッファ２４７は、例えば、後述の図３に示すメモリ３０２により実現される。
【００４３】
トランザクション管理部２４５は、トランザクションを管理する。トランザクション管理部２４５は、トランザクションが確定した場合は、データベースバッファ２４７上の更新データをデータベース２２０に書き出す。一方、トランザクションが取り消された場合は、トランザクション管理部２４５は、データベースバッファ２４７上の更新データを無効にする。ログ管理部２４６は、トランザクションの更新情報をログ２３０に記録する。
【００４４】
（データベースサーバ２０１のハードウェア構成例）
図３は、データベースサーバ２０１のハードウェア構成例を示すブロック図である。図３において、データベースサーバ２０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、メモリ３０２と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０３と、磁気ディスクドライブ３０４と、磁気ディスク３０５と、を有する。また、各構成部は、バス３００によってそれぞれ接続される。
【００４５】
ここで、ＣＰＵ３０１は、データベースサーバ２０１の全体の制御を司る。メモリ３０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ３０１のワークエリアとして使用される。メモリ３０２に記憶されるプログラムは、ＣＰＵ３０１にロードされることで、コーディングされている処理をＣＰＵ３０１に実行させる。
【００４６】
Ｉ／Ｆ３０３は、通信回線を通じてネットワーク２１０に接続され、ネットワーク２１０を介して他のコンピュータ（例えば、図２に示したクライアント装置２０２）に接続される。そして、Ｉ／Ｆ３０３は、ネットワーク２１０と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。Ｉ／Ｆ３０３には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００４７】
磁気ディスクドライブ３０４は、ＣＰＵ３０１の制御にしたがって磁気ディスク３０５に対するデータのリード／ライトを制御する。磁気ディスク３０５は、磁気ディスクドライブ３０４の制御で書き込まれたデータを記憶する。
【００４８】
なお、データベースサーバ２０１は、上述した構成部のほか、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、キーボード、マウス、ディスプレイなどを有することにしてもよい。また、図２に示したクライアント装置２０２についても、上述したデータベースサーバ２０１と同様のハードウェア構成例により実現することができる。
【００４９】
（データベースサーバ２０１の機能的構成例）
図４は、データベースサーバ２０１の機能的構成例を示すブロック図である。図４において、データベースサーバ２０１は、取得部４０１と、比較部４０２と、生成部４０３と、演算部４０４と、出力部４０５と、を含む構成である。各機能部は、具体的には、例えば、図３に示したメモリ３０２、磁気ディスク３０５などの記憶装置に記憶されたプログラムをＣＰＵ３０１に実行させることにより、または、Ｉ／Ｆ３０３により、その機能を実現する。また、各機能部は、例えば、ハードウェアにより実現されてもよい。具体的には、例えば、各機能部は、論理積回路であるＡＮＤ、否定論理回路であるＩＮＶＥＲＴＥＲ、論理和回路であるＯＲ、論理和否定回路であるＮＯＲや、ラッチ回路であるＦＦ（Ｆｌｉｐ  Ｆｌｏｐ）などの素子によって形成されてもよい。各機能部の処理結果は、例えば、メモリ３０２、磁気ディスク３０５などの記憶装置に記憶される。
【００５０】
取得部４０１は、被減算値データおよび減算値データを取得する。ここで、被減算値データおよび減算値データは、例えば、データベース２２０（図２参照）に格納されたレコードを含む８バイトのデータである。具体的には、例えば、取得部４０１は、データベースバッファ２４７（図２参照）に読み込まれたデータから、被減算値データおよび減算値データを取得する。
【００５１】
比較部４０２は、被減算値データおよび減算値データをバイト単位で大小を比較する。具体的には、例えば、比較部４０２は、被減算値データをレジスタｒ１にセットする。また、分割部は、減算値データをレジスタｒ２にセットする。レジスタｒ＄は、ＣＰＵ３０１内部に設けられる８バイトの記憶装置である（＄＝１，２，…）。
【００５２】
つぎに、比較部４０２は、レジスタｒ１，ｒ２にセットした被減算値データおよび減算値データを、１バイト単位でそれぞれ複数に分割する。そして、比較部４０２は、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令により、桁位置が対応する、分割された被減算値データおよび分割された減算値データそれぞれの大小を一括比較する。
【００５３】
以下の説明では、分割された被減算値データのうち、桁位置＃に対応するデータを「データａ＃」と表記する場合がある（＃＝０，１，…，７）。また、分割された減算値データのうち、桁位置＃に対応するデータを「データｂ＃」と表記する場合がある。
【００５４】
生成部４０３は、比較結果に応じて、分割されたデータａ＃の桁情報から定まる繰り下がり値データｃ＃をそれぞれ生成する。ここで、桁情報は、データａ＃に対応する桁位置＃の値として取り得る値の範囲（値域）を示す情報であり、例えば、後述する日数換算マスク、時間換算マスクに相当する。桁情報は、例えば、被減算値データおよび減算値データのデータ型に対応付けてメモリ３０２に記憶されている。
【００５５】
具体的には、例えば、生成部４０３は、桁位置＃に応じて、データａ＃よりもデータｂ＃が大きくなる桁位置＃の値に、桁位置＃の値として取り得る値の個数を加算するための繰り下がり加算値データｄ＃をそれぞれ生成する。また、生成部４０３は、桁位置＃に応じて、データａ＃よりもデータｂ＃が大きくなる桁位置＃に隣接する上位の桁位置（＃−１）の値から１を減算するための繰り下がり減算値データｅ（＃−１）をそれぞれ生成する。
【００５６】
そして、生成部４０３は、桁位置＃が対応する、繰り下がり加算値データｄ＃および繰り下がり減算値データｅ＃をそれぞれ加算することにより、繰り下がり値データｃ＃をそれぞれ生成する。これにより、データａ＃よりもデータｂ＃が大きくなる桁位置＃の値に桁位置＃の値として取り得る値の個数を加算し、上位の桁位置（＃−１）の値から１を減算するための繰り下がり値データｃ＃をそれぞれ生成することができる。
【００５７】
演算部４０４は、桁位置＃が対応する、データａ＃に、生成された繰り下がり値データｃ＃をそれぞれ加算する。そして、演算部４０４は、桁位置＃が対応する、繰り下がり値データｃ＃が加算されたデータａ＃から、データｂ＃をそれぞれ減算する。
【００５８】
出力部４０５は、演算された結果を出力する。具体的には、例えば、出力部４０５は、繰り下がり値データｃ＃が加算されたデータａ＃からデータｂ＃をそれぞれ減算した結果を結合した演算結果を出力する。これにより、被減算値データと減算値データとの時間間隔を示すデータを取得することができる。
【００５９】
出力部４０５の出力形式としては、例えば、メモリ３０２、磁気ディスク３０５などの記憶装置への記憶、Ｉ／Ｆ３０３による外部のコンピュータへの送信、不図示のディスプレイへの表示、不図示のプリンタへの印刷出力などがある。
【００６０】
（ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令）
ここで、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令について説明する。
【００６１】
図５は、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令の概要を示す説明図である。図５において、レジスタｒ１は、８バイトで構成されるレジスタであり、比較対象となる一方のデータを格納する。レジスタｒ２は、８バイトで構成されるレジスタであり、比較対象となる他方のデータを格納するレジスタである。
【００６２】
レジスタｒ１とレジスタｒ２に対して、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令を適用すると、レジスタｒ１のデータとレジスタｒ２のデータとがバイト単位で一括比較され、バイト単位の比較結果がレジスタｒの先頭１バイト域に格納される。このように、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令によれば、一つの命令で複数のデータの比較処理を一括して行うことができ処理性能の向上を図ることができる。
【００６３】
（ＴＩＭＥＳＴＡＭＰ型データの演算処理例）
つぎに、図６〜図１１を用いて、被減算値データおよび減算値データがＴＩＭＥＳＴＡＭＰ型データの場合のデータベースサーバ２０１の演算処理例について説明する。まず、データベースサーバ２０１で内部処理する際のＴＩＭＥＳＴＡＭＰ型データのデータ形式について説明する。
【００６４】
図６は、ＴＩＭＥＳＴＡＭＰ型データのデータ形式を示す説明図である。図６において、ＴＩＭＥＳＴＡＭＰ型データは、ＮＵＬＬ  ｉｎｄ、年、月、日、時、分および秒のフィールドを有し、１レコードが８バイトのデータである。
【００６５】
ここで、ＴＩＭＥＳＴＡＭＰ型データの０バイト目のデータは、ＮＵＬＬ  ｉｎｄを示す。１バイト目のデータは「ＨＩ年」を示す。２バイト目のデータは「ＬＯ年」を示す。３バイト目のデータは「月」を示す。４バイト目のデータは「日」を示す。５バイト目のデータは「時」を示す。６バイト目のデータは「分」を示す。７バイト目のデータは「秒」を示す。
【００６６】
図６の例では、ＴＩＭＥＳＴＡＭＰ型の被減算値データとして、「２０１２年６月２５日３時４８分２１秒」を示すビット列がレジスタｒ１にセットされている。また、ＴＩＭＥＳＴＡＭＰ型の減算値データとして、「２０１０年９月１０日２２時１０分２１秒」を示すビット列がレジスタｒ２にセットされている。
【００６７】
図７〜図１１は、ＴＩＭＥＳＴＡＭＰ型データの演算処理例を示す説明図である。ここでは、レジスタｒ１にセットした左辺の被減算値データから、レジスタｒ２にセットした右辺の減算値データを減算して、「２０１２年６月２５日３時４８分２１秒」と「２０１０年９月１０日２２時１０分２１秒」との日時間隔を取得する場合を想定する。
【００６８】
図７において、（ｉ）比較部４０２は、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令を実行することにより、レジスタｒ１の被減算値データとレジスタｒ２の減算値データとをバイト単位で一括比較して、比較結果をレジスタｒ３の先頭１バイト域に格納する。ここでは、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令のオプションに従って、左辺よりも右辺が大きい場合に、結果バイト（レジスタｒ３の先頭１バイト域）において、比較対象のバイト位置に対応したビット域が設定（ＯＮ）される。
【００６９】
図７の例では、３バイト目が左辺よりも右辺が大きいため、レジスタｒ３の先頭１バイト域において、３バイト目に対応する３ビット目のビット域に「１」が設定される。また、５バイト目が左辺よりも右辺が大きいため、レジスタｒ３の先頭１バイト域において、５バイト目に対応する５ビット目のビット域に「１」が設定される。これにより、桁位置０〜７のうち、左辺よりも右辺が大きい桁位置３，５を特定することができる。
【００７０】
図８において、（ｉｉ）生成部４０３は、レジスタｒ３の先頭１バイト域の結果バイト「０００１０１００」をコピーして、レジスタｒ４に結果バイト「０００１０１００」を８バイト分セットする。以下の説明では、１バイトのデータ（例えば、結果バイト）を、レジスタｒ＄に８バイト分セットしたものを「８バイトＭＥＭＳＥＴデータ」と表記する場合がある。
【００７１】
そして、生成部４０３は、レジスタｒ４の８バイトＭＥＭＳＥＴデータとレジスタｒ５の桁マスクとの並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ６に格納する。桁マスクは、バイト単位で各桁の値を取り出すためのビットマスクである。これにより、１バイトの結果バイト「０００１０１００」をＳＩＭＤ命令で扱うことができる８バイトのデータに拡張することができる。なお、並列論理積（ＡＮＤ）は、バイト単位で論理積（ＡＮＤ）をとることである。
【００７２】
図９において、（ｉｉｉ）生成部４０３は、レジスタｒ３の先頭１バイト域の結果バイト「０００１０１００」を１ビット左にシフトさせる。これにより、左辺から右辺の減算に伴って繰り下がりが発生する繰り下がり箇所を示す結果バイト「００１０１０００」を生成することができる。そして、生成部４０３は、レジスタｒ３の先頭１バイト域の結果バイト「００１０１０００」をコピーして、レジスタｒ７に結果バイト「００１０１０００」を８バイト分セットする。
【００７３】
つぎに、生成部４０３は、レジスタｒ７の８バイトＭＥＭＳＥＴデータとレジスタｒ５の桁マスクとの並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ８に格納する。これにより、１バイトの結果バイト「００１０１０００」をＳＩＭＤ命令で扱うことができる８バイトのデータに拡張することができる。
【００７４】
そして、生成部４０３は、レジスタｒ８の結果とレジスタｒ９の桁マスク（負）との並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ１０に格納する。桁マスク（負）は、バイト単位の値に負符号（−）を付加するためのビットマスクである。これにより、繰り下がり箇所の値から１を減算するための繰り下がりマスクを生成することができる。レジスタｒ１０の繰り下がりマスクは、上述した繰り下がり減算値データｅ０〜ｅ７に対応する。
【００７５】
図１０において、（ｉｖ）生成部４０３は、ＴＩＭＥＳＴＡＭＰ型データに対応する日数換算マスクをレジスタｒ１１にセットする。日数換算マスクは、ＴＩＭＥＳＴＡＭＰ型データの各フィールドに対応する桁位置ごとに、該桁位置の値として取り得る値の個数を示すものである。日数換算マスクは、例えば、メモリ３０２に記憶されている。
【００７６】
ここで、「年」に対応する桁位置１，２の値として取り得る値の範囲はそれぞれ「０〜９９」であり、桁位置１，２の値として取り得る値の個数はそれぞれ「１００」である。また、「月」に対応する桁位置３の値として取り得る値の範囲は「１〜１２」であり、桁位置３の値として取り得る値の個数は「１２」である。
【００７７】
また、「日」に対応する桁位置４の値として取り得る値の範囲は「１〜３１」であり、桁位置４の値として取り得る値の個数は「３１」である。また、「時」に対応する桁位置５の値として取り得る値の範囲は「０〜２３」であり、桁位置５の値として取り得る値の個数は「２４」である。
【００７８】
また、「分」に対応する桁位置６の値として取り得る値の範囲は「０〜５９」であり、桁位置６の値として取り得る値の個数は「６０」である。また、「秒」に対応する桁位置７の値として取り得る値の範囲は「０〜５９」であり、桁位置７の値として取り得る値の個数は「６０」である。
【００７９】
ただし、桁位置４の値として取り得る値の個数は、被減算値データの桁位置３の値に応じて切り替わる。具体的には、被減算値データの桁位置３の値が１，２，４，６，８，９，１１のいずれかであれば、桁位置４の値として取り得る値の個数は「３１」となる。また、被減算値データの桁位置３の値が５，７，１０，１２のいずれかであれば、桁位置４の値として取り得る値の個数は「３０」となる。
【００８０】
また、被減算値データの桁位置３の値が３であれば、桁位置４の値として取り得る値の個数は「２８」となる。さらに、被減算値データの年が閏年を示す場合は、被減算値データの桁位置３の値が３であれば、桁位置４の値として取り得る値の個数は「２９」となる。また、ＮＵＬＬ  ｉｎｄに対応する桁位置０の値として取り得る値の個数は「０」とする。
【００８１】
つぎに、生成部４０３は、レジスタｒ１１の日数換算マスクとレジスタｒ６の結果との並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ１２に格納する。これにより、繰り下がりに伴って左辺よりも右辺が大きい桁位置に加算する値を示すデータを生成することができる。レジスタｒ１２の結果は、上述した繰り下がり加算値データｄ０〜ｄ７に対応する。
【００８２】
そして、生成部４０３は、レジスタｒ１２の結果とレジスタｒ１０の繰り下がりマスクとを加算して、結果をレジスタｒ１３に格納する。これにより、左辺よりも右辺が大きい桁位置に加算する値および繰り下がり箇所に減算する値を示す繰り下がり値データを生成することができる。レジスタｒ１３の結果は、上述した繰り下がり値データｃ０〜ｃ７に対応する。
【００８３】
図１１において、（ｖ）生成部４０３は、レジスタｒ１３の繰り下がり値のデータとレジスタｒ１の被減算値データとを加算して、結果をレジスタｒ１４に格納する。これにより、繰り下がり処理された被減算値データを生成することができる。繰り下がり処理とは、左辺よりも右辺が大きい桁位置への加算および繰り下がり箇所への減算を行う処理である。
【００８４】
そして、生成部４０３は、レジスタｒ１４の繰り下がり処理された被減算値データからレジスタｒ２の減算値データを減算して、結果をレジスタｒ１５に格納する。これにより、「２０１２年６月２５日３時４８分２１秒」と「２０１０年９月１０日２２時１０分２１秒」との日時間隔「１年９ヶ月１４日５時間３８分０秒」を取得することができる。
【００８５】
（ＴＩＭＥ型データの演算処理例）
つぎに、図１２〜図１７を用いて、被減算値データおよび減算値データがＴＩＭＥ型データの場合のデータベースサーバ２０１の演算処理例について説明する。まず、データベースサーバ２０１で内部処理する際のＴＩＭＥ型データのデータ形式について説明する。
【００８６】
図１２は、ＴＩＭＥ型データのデータ形式を示す説明図である。図１２において、ＴＩＭＥ型データは、ＮＵＬＬ  ｉｎｄ、時、分、秒および４つのｐａｄｄｉｎｇのフィールドを有し、１レコードが８バイトのデータである。
【００８７】
ここで、ＴＩＭＥ型データの０バイト目のデータは、ＮＵＬＬ  ｉｎｄを示す。１バイト目のデータは「時」を示す。２バイト目のデータは「分」を示す。３バイト目のデータは「秒」を示す。４〜７バイト目のデータは「ｐａｄｄｉｎｇ」を示す。「ｐａｄｄｉｎｇ」は、被減算値データおよび減算値データを８バイトの固定長で扱うために追加する無意味なデータを示す。
【００８８】
データベース２２０において、ＴＩＭＥ型データは、時、分、秒の各々が１バイトの長さで構成され、全体が３バイトとなる。ここでは、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令を利用するため、演算を行う領域を８バイトとさせる。具体的には、データベースサーバ２０１は、ＮＵＬＬ  ｉｎｄを除く、８バイトに満たない部分の右側４バイトはゼロパディングして演算する。
【００８９】
図１２の例では、ＴＩＭＥ型の被減算値データとして、「２３時１７分５６秒」を示すビット列がレジスタｒ１にセットされている。また、ＴＩＭＥ型の減算値データとして、「９時４３分２８秒」を示すビット列がレジスタｒ２にセットされている。
【００９０】
図１３〜図１７は、ＴＩＭＥ型データの演算処理例を示す説明図である。ここでは、レジスタｒ１にセットした左辺の被減算値データから、レジスタｒ２にセットした右辺の減算値データを減算して、「２３時１７分５６秒」と「９時４３分２８秒」との時間間隔を取得する場合を想定する。
【００９１】
図１３において、（ｉ）比較部４０２は、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令を実行することにより、レジスタｒ１の被減算値データとレジスタｒ２の減算値データとをバイト単位で一括比較して、比較結果をレジスタｒ３の先頭１バイト域に格納する。
【００９２】
図１３の例では、２バイト目が左辺よりも右辺が大きいため、レジスタｒ３の先頭１バイト域において、２バイト目に対応する２ビット目のビット域に「１」が設定される。これにより、桁位置０〜７のうち、左辺よりも右辺が大きい桁位置２を特定することができる。
【００９３】
図１４において、（ｉｉ）生成部４０３は、レジスタｒ３の先頭１バイト域の結果バイト「００１０００００」をコピーして、レジスタｒ４に結果バイト「００１０００００」を８バイト分セットする。そして、生成部４０３は、レジスタｒ４の８バイトＭＥＭＳＥＴデータとレジスタｒ５の桁マスクとの並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ６に格納する。これにより、１バイトの結果バイト「００１０００００」をＳＩＭＤ命令で扱うことができる８バイトのデータに拡張することができる。
【００９４】
図１５において、（ｉｉｉ）生成部４０３は、レジスタｒ３の先頭１バイト域の結果バイト「００１０００００」を１ビット左にシフトさせる。これにより、左辺から右辺の減算に伴って繰り下がりが発生する繰り下がり箇所を示す結果バイト「０１００００００」を生成することができる。そして、生成部４０３は、レジスタｒ３の先頭１バイト域の結果バイト「０１００００００」をコピーして、レジスタｒ７に結果バイト「０１００００００」を８バイト分セットする。
【００９５】
つぎに、生成部４０３は、レジスタｒ７の８バイトＭＥＭＳＥＴデータとレジスタｒ５の桁マスクとの並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ８に格納する。これにより、１バイトの結果バイト「０１００００００」をＳＩＭＤ命令で扱うことができる８バイトのデータに拡張することができる。
【００９６】
そして、生成部４０３は、レジスタｒ８の拡張結果とレジスタｒ９の桁マスク（負）との並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ１０に格納する。これにより、繰り下がり箇所の値から１を減算するための繰り下がりマスクを生成することができる。レジスタｒ１０の繰り下がりマスクは、上述した繰り下がり減算値データｅ０〜ｅ７に対応する。
【００９７】
図１６において、（ｉｖ）生成部４０３は、ＴＩＭＥ型データに対応する時間換算マスクをレジスタｒ１１にセットする。時間換算マスクは、ＴＩＭＥ型データの各フィールドに対応する桁位置ごとに、該桁位置の値として取り得る値の個数を示すものである。時間換算マスクは、例えば、メモリ３０２に記憶されている。
【００９８】
ここで、「時」に対応する桁位置１の値として取り得る値の範囲は「０〜２３」であり、桁位置１の値として取り得る値の個数は「２４」である。また、「分」に対応する桁位置２の値として取り得る値の範囲は「０〜５９」であり、桁位置２の値として取り得る値の個数は「６０」である。また、「秒」に対応する桁位置３の値として取り得る値の範囲は「０〜５９」であり、桁位置３の値として取り得る値の個数は「６０」である。
【００９９】
ただし、ＮＵＬＬ  ｉｎｄに対応する桁位置０の値として取り得る値の個数は「０」とする。同様に、ｐａｄｄｉｎｇに対応する桁位置４〜７の値として取り得る値の個数は「０」とする。
【０１００】
つぎに、生成部４０３は、レジスタｒ１１の時間換算マスクとレジスタｒ６の結果との並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ１２に格納する。これにより、繰り下がりに伴って左辺よりも右辺が大きい桁位置に加算する値を示すデータを生成することができる。レジスタｒ１２の結果は、上述した繰り下がり加算値データｄ０〜ｄ７に対応する。
【０１０１】
そして、生成部４０３は、レジスタｒ１２の結果とレジスタｒ１０の繰り下がりマスクとを加算して、結果をレジスタｒ１３に格納する。これにより、左辺よりも右辺が大きい桁位置に加算する値および繰り下がり箇所に減算する値を示す繰り下がり値のデータを生成することができる。レジスタｒ１３の結果は、上述した繰り下がり値データｃ０〜ｃ７に対応する。
【０１０２】
図１７において、（ｖ）生成部４０３は、レジスタｒ１３の繰り下がり値のデータとレジスタｒ１の被減算値データとを加算して、結果をレジスタｒ１４に格納する。これにより、繰り下がり処理された被減算値データを生成することができる。
【０１０３】
そして、生成部４０３は、レジスタｒ１４の繰り下がり処理された被減算値データからレジスタｒ２の減算値データを減算して、結果をレジスタｒ１５に格納する。これにより、「２３時１７分５６秒」と「９時４３分２８秒」との時間間隔「１３時間３４分２８秒」を取得することができる。
【０１０４】
（ＤＡＴＥ型データの演算処理例）
つぎに、図１８〜図２３を用いて、被減算値データおよび減算値データがＤＡＴＥ型データの場合のデータベースサーバ２０１の演算処理例について説明する。まず、データベースサーバ２０１で内部処理する際のＤＡＴＥ型データのデータ形式について説明する。
【０１０５】
図１８は、ＤＡＴＥ型データのデータ形式を示す説明図である。図１８において、ＤＡＴＥ型データは、ＮＵＬＬ  ｉｎｄ、ＨＩ年、ＬＯ年、月、日および３つのｐａｄｄｉｎｇのフィールドを有し、１レコードが８バイトのデータである。
【０１０６】
ここで、ＤＡＴＥ型データの０バイト目のデータは、ＮＵＬＬ  ｉｎｄを示す。１バイト目のデータは「ＨＩ年」を示す。２バイト目のデータは「ＬＯ年」を示す。３バイト目のデータは「月」を示す。４バイト目のデータは「日」を示す。５〜７バイト目のデータは「ｐａｄｄｉｎｇ」を示す。
【０１０７】
データベース２２０において、ＤＡＴＥ型データは、年が２バイト、月、日の各々が１バイトの長さで構成され、全体が４バイトとなる。ここでは、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令を利用するため、演算を行う領域を８バイトとさせる。具体的には、データベースサーバ２０１は、ＮＵＬＬ  ｉｎｄを除く、８バイトに満たない部分の右側３バイトはゼロパディングして演算する。
【０１０８】
図１８の例では、ＤＡＴＥ型の被減算値データとして、「２０１３年７月１７日」を示すビット列がレジスタｒ１にセットされている。また、ＤＡＴＥ型の減算値データとして、「２０１２年１０月２５日」を示すビット列がレジスタｒ２にセットされている。
【０１０９】
図１９〜図２３は、ＤＡＴＥ型データの演算処理例を示す説明図である。ここでは、レジスタｒ１にセットした左辺の被減算値データから、レジスタｒ２にセットした右辺の減算値データを減算して、「２０１３年７月１７日」と「２０１２年１０月２５日」との時間間隔を取得する場合を想定する。
【０１１０】
図１９において、（ｉ）比較部４０２は、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令を実行することにより、レジスタｒ１の被減算値データとレジスタｒ２の減算値データとをバイト単位で一括比較して、比較結果をレジスタｒ３の先頭１バイト域に格納する。
【０１１１】
図１９の例では、３，４バイト目が左辺よりも右辺が大きいため、レジスタｒ３の先頭１バイト域において、３，４バイト目に対応する３，４ビット目のビット域に「１」が設定される。これにより、桁位置０〜７のうち、左辺よりも右辺が大きい桁位置３，４を特定することができる。
【０１１２】
図２０において、（ｉｉ）生成部４０３は、レジスタｒ３の先頭１バイト域の結果バイト「０００１１０００」をコピーして、レジスタｒ４に結果バイト「０００１１０００」を８バイト分セットする。そして、生成部４０３は、レジスタｒ４の８バイトＭＥＭＳＥＴデータとレジスタｒ５の桁マスクとの並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ６に格納する。これにより、１バイトの結果バイト「０００１１０００」をＳＩＭＤ命令で扱うことができる８バイトのデータに拡張することができる。
【０１１３】
図２１において、（ｉｉｉ）生成部４０３は、レジスタｒ３の先頭１バイト域の結果バイト「０００１１０００」を１ビット左にシフトさせる。これにより、左辺から右辺の減算に伴って繰り下がりが発生する繰り下がり箇所を示す結果バイト「００１１００００」を生成することができる。そして、生成部４０３は、レジスタｒ３の先頭１バイト域の結果バイト「００１１００００」をコピーして、レジスタｒ７に結果バイト「００１１００００」を８バイト分セットする。
【０１１４】
つぎに、生成部４０３は、レジスタｒ７の８バイトＭＥＭＳＥＴデータとレジスタｒ５の桁マスクとの並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ８に格納する。これにより、１バイトの結果バイト「００１１００００」をＳＩＭＤ命令で扱うことができる８バイトのデータに拡張することができる。
【０１１５】
そして、生成部４０３は、レジスタｒ８の拡張結果とレジスタｒ９の桁マスク（負）との並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ１０に格納する。これにより、繰り下がり箇所の値から１を減算するための繰り下がりマスクを生成することができる。レジスタｒ１０の繰り下がりマスクは、上述した繰り下がり減算値データｅ０〜ｅ７に対応する。
【０１１６】
図２２において、（ｉｖ）生成部４０３は、ＤＡＴＥ型データに対応する日数換算マスクをレジスタｒ１１にセットする。日数換算マスクは、ＤＡＴＥ型データの各フィールドに対応する桁位置ごとに、該桁位置の値として取り得る値の個数を示すものである。日数換算マスクは、例えば、メモリ３０２に記憶されている。
【０１１７】
ここで、「年」に対応する桁位置１，２の値として取り得る値の範囲はそれぞれ「０〜９９」であり、桁位置１，２の値として取り得る値の個数はそれぞれ「１００」である。また、「月」に対応する桁位置３の値として取り得る値の範囲は「１〜１２」であり、桁位置３の値として取り得る値の個数は「１２」である。
【０１１８】
また、「日」に対応する桁位置４の値として取り得る値の範囲は「１〜３１」であり、桁位置４の値として取り得る値の個数は「３１」である。ただし、ＮＵＬＬ  ｉｎｄに対応する桁位置０の値として取り得る値の個数は「０」とする。同様に、ｐａｄｄｉｎｇに対応する桁位置５〜７の値として取り得る値の個数は「０」とする。
【０１１９】
つぎに、生成部４０３は、レジスタｒ１１の日数換算マスクとレジスタｒ６の結果との並列論理積（ＡＮＤ）を求めて、結果をレジスタｒ１２に格納する。これにより、繰り下がりに伴って左辺よりも右辺が大きい桁位置に加算する値を示すデータを生成することができる。レジスタｒ１２の結果は、上述した繰り下がり加算値データｄ０〜ｄ７に対応する。
【０１２０】
そして、生成部４０３は、レジスタｒ１２の結果とレジスタｒ１０の繰り下がりマスクとを加算して、結果をレジスタｒ１３に格納する。これにより、左辺よりも右辺が大きい桁位置に加算する値および繰り下がり箇所に減算する値を示す繰り下がり値のデータを生成することができる。レジスタｒ１３の結果は、上述した繰り下がり値データｃ０〜ｃ７に対応する。
【０１２１】
図２３において、（ｖ）生成部４０３は、レジスタｒ１３の繰り下がり値のデータとレジスタｒ１の被減算値データとを加算して、結果をレジスタｒ１４に格納する。これにより、繰り下がり処理された被減算値データを生成することができる。
【０１２２】
そして、生成部４０３は、レジスタｒ１４の繰り下がり処理された被減算値データからレジスタｒ２の減算値データを減算して、結果をレジスタｒ１５に格納する。これにより、「２０１３年７月１７日」と「２０１２年１０月２５日」との時間間隔「８ヶ月２２日」を取得することができる。
【０１２３】
（データベースサーバ２０１の演算処理手順）
つぎに、データベースサーバ２０１の演算処理手順について説明する。ここでは、被減算値データおよび減算値データがＴＩＭＥＳＴＡＭＰ型データの場合を例に挙げて説明する。
【０１２４】
図２４および図２５は、データベースサーバ２０１の演算処理手順の一例を示すフローチャートである。図２４のフローチャートにおいて、まず、データベースサーバ２０１は、レジスタｒ１，ｒ２に被減算値データおよび減算値データをそれぞれ格納する（ステップＳ２４０１）。
【０１２５】
つぎに、データベースサーバ２０１は、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令により、レジスタｒ１の被減算値データとレジスタｒ２の減算値データとをバイト単位で大小を一括比較して、比較結果をレジスタｒ３の先頭１バイト域に格納する（ステップＳ２４０２）。
【０１２６】
具体的には、データベースサーバ２０１は、レジスタｒ３の先頭１バイト域において、左辺よりも右辺が大きいバイト位置に対応するビット域（桁）をＯＮ（１）に設定する。また、データベースサーバ２０１は、レジスタｒ３の先頭１バイト域において、左辺が右辺以上のバイト位置に対応するビット域（桁）をＯＦＦ（０）に設定する。
【０１２７】
つぎに、データベースサーバ２０１は、レジスタｒ３の先頭１バイト域の結果バイトをコピーして、レジスタｒ４に結果バイトを８バイト分セットする（ステップＳ２４０３）。そして、データベースサーバ２０１は、レジスタｒ４のデータ（８バイトＭＥＭＳＥＴデータ）とレジスタｒ５の桁マスクとの並列論理積（ＡＮＤ）をとって、結果をレジスタｒ６に格納する（ステップＳ２４０４）。
【０１２８】
具体的には、データベースサーバ２０１は、レジスタｒ４とレジスタｒ５との間でいずれかの値が一致するバイト位置に対応するバイト域（桁）をＯＮ（１）に設定する。また、データベースサーバ２０１は、レジスタｒ４とレジスタｒ５との間でいずれの値も一致しないバイト位置に対応するバイト域（桁）をＯＦＦ（０）に設定する。
【０１２９】
つぎに、データベースサーバ２０１は、レジスタｒ３の先頭１バイト域の結果バイトを１ビット左にシフトさせる（ステップＳ２４０５）。そして、データベースサーバ２０１は、１ビット左シフトした結果バイトをコピーして、レジスタｒ７に結果バイトを８バイト分セットする（ステップＳ２４０６）。
【０１３０】
つぎに、データベースサーバ２０１は、レジスタｒ７のデータ（８バイトＭＥＭＳＥＴデータ）とレジスタｒ５の桁マスクとの並列論理積（ＡＮＤ）をとって、結果をレジスタｒ８に格納する（ステップＳ２４０７）。
【０１３１】
つぎに、データベースサーバ２０１は、レジスタｒ８の結果とレジスタｒ９の桁マスク（負）との並列論理積（ＡＮＤ）をとって、結果をレジスタｒ１０に格納して（ステップＳ２４０８）、図２５に示すステップＳ２５０１に移行する。
【０１３２】
図２５のフローチャートにおいて、まず、データベースサーバ２０１は、ＴＩＭＥＳＴＡＭＰ型データに対応する日数換算マスクをレジスタｒ１１にセットする（ステップＳ２５０１）。そして、データベースサーバ２０１は、レジスタｒ１１の日数換算マスクとレジスタｒ６の結果との並列論理積（ＡＮＤ）をとって、結果をレジスタｒ１２に格納する（ステップＳ２５０２）。
【０１３３】
つぎに、データベースサーバ２０１は、レジスタｒ１２の結果とレジスタｒ１０の繰り下がりマスクとを加算して、結果をレジスタｒ１３に格納する（ステップＳ２５０３）。そして、データベースサーバ２０１は、レジスタｒ１３の繰り下がり値データとレジスタｒ１の被減算値データとを加算して、結果をレジスタｒ１４に格納する（ステップＳ２５０４）。
【０１３４】
つぎに、データベースサーバ２０１は、レジスタｒ１４の繰り下がり処理された被減算値データからレジスタｒ２の減算値データを減算して、結果をレジスタｒ１５に格納する（ステップＳ２５０５）。そして、データベースサーバ２０１は、レジスタｒ１５の結果を、日時間隔を示すデータとして出力して（ステップＳ２５０６）、本フローチャートによる一連の処理を終了する。
【０１３５】
これにより、被減算値データが示す日時と減算値データが示す日時との日時間隔を示すデータを取得することができる。
【０１３６】
以上説明したように、実施の形態にかかるデータベースサーバ２０１によれば、ＳＩＭＤ  ＣＯＭＰＡＲＥ  命令により、桁位置＃が対応する、データａ＃（分割された被減算値データ）およびデータｂ＃（分割された減算値データ）それぞれの大小比較を一括して行うことができる。これにより、日時や時刻を表すデータの各桁位置の大小比較にかかる処理ステップ数を１回に削減することができる。
【０１３７】
また、データベースサーバ２０１によれば、並列処理命令により、データａ＃よりもデータｂ＃が大きくなる桁位置＃の値に、桁位置＃の値として取り得る値の個数を加算するための繰り下がり加算値データｄ＃をそれぞれ生成することができる。これにより、繰り下がりに伴って各桁位置に加算する値を示すデータを効率的に生成することができる。
【０１３８】
また、データベースサーバ２０１によれば、並列処理命令により、繰り下がり箇所の桁位置＃の値から１を減算するための繰り下がり減算値データｅ＃をそれぞれ生成することができる。これにより、繰り下がりに伴って各桁位置に減算する値を示すデータを効率的に生成することができる。
【０１３９】
また、データベースサーバ２０１によれば、並列処理命令により、桁位置＃が対応する、繰り下がり加算値データｄ＃および繰り下がり減算値データｅ＃をそれぞれ加算することにより、繰り下がり値データｃ＃をそれぞれ生成することができる。これにより、繰り下がりに伴って各桁位置に減算および加算する値を示すデータを効率的に生成することができる。
【０１４０】
また、データベースサーバ２０１によれば、並列処理命令により、桁位置＃が対応する、データａ＃に繰り下がり値データｃ＃をそれぞれ加算することができる。これにより、繰り下がり処理された被減算値データを効率的に生成することができる。
【０１４１】
また、データベースサーバ２０１によれば、並列処理命令により、桁位置＃が対応する、繰り下がり値データｃ＃が加算されたデータａ＃から、データｂ＃をそれぞれ減算することができる。これにより、繰り下がり処理された被減算値データが示す時間（日時や時刻）と減算値データが示す時間との時間間隔を示すデータを効率的に取得することができる。
【０１４２】
これらのことから、データベースサーバ２０１によれば、ＴＩＭＥＳＴＡＭＰ型データ、ＴＩＭＥ型データおよびＤＡＴＥ型データのように、桁位置によって取り得る値の範囲が異なるデータの減算処理の高速化を図ることができる。
【０１４３】
例えば、ＴＩＭＥＳＴＡＭＰ型データの桁位置ごとに、大小比較を繰り返し行って、繰り下がりに伴う減算および加算を繰り返し行うと、全体で４２ステップ（減算：６ステップ、減算以外：３６ステップ）かかる。これに対して、データベースサーバ２０１によれば、ＴＩＭＥＳＴＡＭＰ型データの減算にかかる処理ステップ数を全体で１１ステップ（一括比較：１ステップ、一括繰り下げ：９ステップ、一括減算：１ステップ）に削減することができ、処理性能の向上を図ることができる。
【０１４４】
なお、上述した説明では、データベースサーバ２０１で内部処理する際の各種データ型のデータ形式として、被減算値データおよび減算値データが８バイトの場合を例に挙げて説明したが、これに限らない。例えば、１命令で処理されるデータのビット長（例えば、１６バイト、３２バイト）に合わせて、被減算値データおよび減算値データを１６バイトや３２バイトとして扱うことにしてもよい。
【０１４５】
また、上述した説明では、被減算値データおよび減算値データを１バイト単位で分割する場合を例に挙げて説明したが、これに限らない。例えば、１命令で複数のデータを同時に処理する命令の処理単位（例えば、２バイト、３バイト）に合わせて、被減算値データおよび減算値データを２バイト単位や３バイト単位で分割することにしてもよい。
【０１４６】
本実施の形態で説明した演算方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本演算プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本演算プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１４７】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１４８】
（付記１）コンピュータに、
被減算値データおよび減算値データを、１バイト単位でそれぞれ複数に分割し、
桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、
桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する、
処理を実行させることを特徴とする演算プログラム。
【０１４９】
（付記２）前記コンピュータに、
桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置の値に該桁位置の値として取り得る値の個数を加算し、該桁位置に隣接する上位の桁位置の値から１を減算するための繰り下がり値データをそれぞれ生成する処理を実行させ、
前記加算する処理は、
桁位置が対応する、前記分割された被減算値データに、前記生成された繰り下がり値データをそれぞれ加算することを特徴とする付記１に記載の演算プログラム。
【０１５０】
（付記３）前記コンピュータに、
桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置の値に前記桁位置の値として取り得る値の個数を加算するための繰り下がり加算値データをそれぞれ生成し、
桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置に隣接する上位の桁位置の値から１を減算するための繰り下がり減算値データをそれぞれ生成する処理を実行させ、
前記繰り下がり値データを生成する処理は、
桁位置が対応する、前記繰り下がり加算値データおよび前記繰り下がり減算値データをそれぞれ加算することにより、前記繰り下がり値データをそれぞれ生成することを特徴とする付記２に記載の演算プログラム。
【０１５１】
（付記４）前記被減算値データおよび前記減算値データは、年、月、日、時、分および秒それぞれを示すバイト単位のデータを並べたＴＩＭＥＳＴＡＭＰ型データであることを特徴とする付記１〜３のいずれか一つに記載の演算プログラム。
【０１５２】
（付記５）前記被減算値データおよび前記減算値データは、時、分および秒それぞれを示すバイト単位のデータを並べたＴＩＭＥ型データであることを特徴とする付記１〜３のいずれか一つに記載の演算プログラム。
【０１５３】
（付記６）前記被減算値データおよび前記減算値データは、年、月および日それぞれを示すバイト単位のデータを並べたＤＡＴＥ型データであることを特徴とする付記１〜３のいずれか一つに記載の演算プログラム。
【０１５４】
（付記７）被減算値データおよび減算値データを、１バイト単位でそれぞれ複数に分割し、桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較する比較部と、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する演算部と、
を有することを特徴とする演算装置。
【０１５５】
（付記８）コンピュータが、
被減算値データおよび減算値データを、１バイト単位でそれぞれ複数に分割し、
桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、
桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する、
処理を実行することを特徴とする演算方法。
【０１５６】
（付記９）被減算値データおよび減算値データを、１バイト単位でそれぞれ複数に分割し、
桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、
桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する、
処理をコンピュータに実行させる演算プログラムを記録したことを特徴とする前記コンピュータに読み取り可能な記録媒体。
【符号の説明】
【０１５７】
１００  演算装置
２００  データベースシステム
２０１  データベースサーバ
２０２  クライアント装置
３０１  ＣＰＵ
３０２  メモリ
３０３  Ｉ／Ｆ
３０４  磁気ディスクドライブ
３０５  磁気ディスク
４０１  取得部
４０２  比較部
４０３  生成部
４０４  演算部
４０５  出力部
【図１】
2015143949.tif 000003
【図２】
2015143949.tif 000004
【図３】
2015143949.tif 000005
【図４】
2015143949.tif 000006
【図５】
2015143949.tif 000007
【図６】
2015143949.tif 000008
【図７】
2015143949.tif 000009
【図８】
2015143949.tif 000010
【図９】
2015143949.tif 000011
【図１０】
2015143949.tif 000012
【図１１】
2015143949.tif 000013
【図１２】
2015143949.tif 000014
【図１３】
2015143949.tif 000015
【図１４】
2015143949.tif 000016
【図１５】
2015143949.tif 000017
【図１６】
2015143949.tif 000018
【図１７】
2015143949.tif 000019
【図１８】
2015143949.tif 000020
【図１９】
2015143949.tif 000021
【図２０】
2015143949.tif 000022
【図２１】
2015143949.tif 000023
【図２２】
2015143949.tif 000024
【図２３】
2015143949.tif 000025
【図２４】
2015143949.tif 000026
【図２５】
2015143949.tif 000027