web-dev-qa-db-ja.com

SQLデータ型-年を保存する方法は?

データベースに年(例:1988、1990など)を挿入する必要があります。 DateまたはDatetimeデータ型を使用すると、エラーが表示されます。どのデータ型を使用する必要があります。

38
peter

データベースに年を保存する必要がある場合は、整数データ型(年のみを保存するように設定されていない場合)またはDateTimeデータ型(基本的に1/1/1990 00:00:00形式)。

29
TheTXI

通常の4バイトINTは大きくする方法であり、スペースの無駄です!

どのデータベースを使用しているのか言わないので、特定のデータ型を推奨することはできません。誰もが「整数を使用する」と言っていますが、ほとんどのデータベースは整数を4バイトで保存します。これは必要以上に大きいです。スペースを節約するために、2バイト整数(SQL Serverのsmallint)を使用する必要があります。

34
KM.

おい、MySQLでyear()を使用できます。2桁または4桁の形式で利用できます。

注:4桁の形式で許可される値:1901から2155。2桁の形式で許可される値:70から69、1970年から2069年を表します

11
user786900

MSSQLに「年」を保存することは、理想的には、MSSQLで何をしているのか、そしてその「年」の意味がアプリケーションとデータベースに何であるかに依存します。ここで述べるべきことがいくつかあります。 2012年のMSSQLには、Yearの「DataType」はありません。 SMALLINTは2バイトしかないため(INTが要求する4バイトのうち2バイトを節約)、SMALLINTを使用する傾向があります。あなたの制限は、32767(SQL Server 2008R2の時点で)よりも古い年を持つことはできないということです。 32767は言うまでもなく、SQLが1万年後の選択肢のデータベースになるとは、私は本当に思いません。先ほど言ったように、データをどこで取得し、どこに行くかによって異なりますが、SMALLINTは問題ないはずです。 INTは、上記で述べたような他の理由がない限り、またはコード要件がINT形式でそれを必要としない限り(例えば、既存のアプリケーションとの統合)、やり過ぎです。ほとんどの場合、SMALLINTで十分です。

3
Qubits

ほんの一年、他に何もない?単純な整数を使用しないのはなぜですか?

1

格納する必要があるのが年のみである場合は、整数を使用します。この列のクエリ中に日付ベースの計算があると思われる場合は、datetimeも使用できます。

1
Ender

ストレージは問題の一部にすぎない場合があります。この値はクエリでどのように使用されますか?

別の日時データ型と比較されますか、それとも関連するすべての行にも数値が含まれますか?

要件の変更にどのように対処しますか?年をより短いタイムスライスに置き換えるという要求に、どの程度簡単に対応できますか?つまり、今では四半期ごとに分割したいのですか?

数値型は、開始日と終了日(1/1/Xから12/31/x)などを含むルックアップテーブルを結合することで、日時クエリで簡単に使用できます。

0
Rawheiser

整数または整数のサブタイプを使用することは良い選択だとは思いません。遅かれ早かれ、それに対する操作のような他の日付を実行する必要があります。また、2019年にはスペースについてあまり心配する必要はありません。 2000年に2バイト節約した場合のコストをご覧ください。

年+ 0101の日付を真の日付に変換して使用することをお勧めします。同様に、年の月を格納する必要がある場合、年+月+ 01を真の日付として格納します。

それを行った場合、後で「日付のもの」を適切に行うことができます

0
Saad Ahmad

データベースに年を挿入しようとしている場合は、次を使用します:
type YEAR

0
Arslan Ahmad