web-dev-qa-db-de.com

SQL-Datentyp - Wie speichere ich ein Jahr?

Ich muss ein Jahr (zB: 1988, 1990 usw.) in eine Datenbank einfügen. Wenn ich Datum oder Datetimedata verwendet habe, werden Fehler angezeigt. Welchen Datentyp soll ich verwenden? 

36
peter

Wenn Sie ein Jahr in der Datenbank speichern möchten, möchten Sie entweder einen Integer-Datentyp (wenn Sie das Jahr nur speichern möchten) oder einen DateTime-Datentyp verwenden (dies würde das Speichern eines Datums beinhalten, das im Wesentlichen 1/1/ist.) 1990 00:00:00 (Format).

28
TheTXI

Normales 4-Byte-INT ist viel zu groß, ist Platzverschwendung!  

Sie sagen nicht, welche Datenbank Sie verwenden, daher kann ich keinen bestimmten Datentyp empfehlen. Jeder sagt "Ganzzahl verwenden", aber die meisten Datenbanken speichern Ganzzahlen mit 4 Bytes, was viel mehr ist, als Sie benötigen. Sie sollten eine zwei Byte umfassende Ganzzahl (Smallint auf SQL Server) verwenden, um Speicherplatz zu sparen.

31
KM.

Hey, Sie können year () datatype in MySQL verwenden Es ist zweistellig oder vierstellig verfügbar.

Anmerkung: Zulässige Werte im vierstelligen Format: 1901 bis 2155. Zulässiger Wert im zweistelligen Format: 70 bis 69, dh die Jahre 1970 bis 2069

9
user786900

Das Speichern eines "Jahres" in MSSQL hängt im Idealfall davon ab, was Sie damit machen und was die Bedeutung dieses "Jahres" für Ihre Anwendung und Datenbank bedeutet. Davon abgesehen gibt es hier einiges zu sagen. Es gibt keinen "Datentyp" für 2012 in MSSQL für das Jahr 2012. Ich würde mich eher für die Verwendung von SMALLINT entscheiden, da es nur 2 Bytes sind (Sie sparen 2 der 4 Bytes, die INT fordert). Ihre Einschränkung ist, dass Sie kein Jahr älter als 32767 (ab SQL Server 2008R2) sein dürfen. Ich glaube nicht, dass SQL die Datenbank der Wahl in zehntausend Jahren sein wird, ganz zu schweigen von 32767. Sie können INT als die Year () - Funktion in MSSQL betrachten, die den Datentyp "DATE" in ein INT konvertiert. Wie gesagt, es hängt davon ab, wo Sie die Daten erhalten und wohin sie gehen, aber SMALLINT sollte in Ordnung sein. INT wäre übertrieben ... es sei denn, Sie haben andere Gründe wie die oben genannten oder die Codeanforderungen benötigen eine INT-Form (z. B. Integration in eine vorhandene Anwendung). Wahrscheinlich sollte SMALLINT in Ordnung sein.

3
Qubits

Nur ein Jahr, sonst nichts? ... Warum verwenden Sie keine einfache Ganzzahl? 

1

Verwenden Sie eine Ganzzahl, wenn Sie nur das Jahr speichern möchten. Sie können datetime auch verwenden, wenn Sie der Meinung sind, dass während der Abfrage dieser Spalte datumsbasierte Berechnungen durchgeführt werden

1
Ender

Die Speicherung kann nur ein Teil des Problems sein. Wie wird dieser Wert in einer Abfrage verwendet? 

Wird es mit anderen Datum/Uhrzeit-Datentypen verglichen, oder haben alle zugehörigen Zeilen auch numerische Werte?

Wie würden Sie mit einer Änderung der Anforderungen umgehen? Wie leicht könnten Sie auf eine Anfrage reagieren, das Jahr durch eine kleinere Zeitspanne zu ersetzen? Jetzt wollen sie, dass es viertel heruntergebrochen ist?

Ein numerischer Typ kann leicht in einer Datums-/Uhrzeitabfrage verwendet werden, indem eine Nachschlagetabelle zum Verknüpfen mit Angaben wie Start- und Enddatum (1/1/X bis 12/31/x) usw. verwendet wird.

0
Rawheiser

Ich denke nicht, dass die Verwendung einer Ganzzahl oder eines Subtyps einer Ganzzahl eine gute Wahl ist. Früher oder später müssen Sie andere Daten wie Operationen daran ausführen. Auch im Jahr 2019 sollten wir uns nicht zu sehr um den Weltraum kümmern. Sehen Sie, was uns diese 2 Bytes im Jahr 2000 gekostet haben.

Ich schlage vor, ein Datum von Jahr + 0101 zu verwenden, das in ein echtes Datum konvertiert wurde. Wenn Sie einen Monat eines Jahres speichern müssen, speichern Sie Jahr + Monat + 01 als echtes Datum.

Wenn Sie das getan haben, können Sie später "Date Stuff" richtig darauf machen

0
Saad Ahmad

sie versuchen, ein Jahr in die Datenbank einzufügen, und verwenden dann:
type YEAR

0
Arslan Ahmad