database - number - type timestamp sql




SQL DataType-Comment stocker une année? (6)

Je dois insérer une année (par exemple: 1988, 1990, etc.) dans une base de données. Lorsque j'ai utilisé le type de données Date ou Date / Heure, il affiche des erreurs. Quel type de données devrais-je utiliser?


Hé, vous pouvez utiliser le type de données year () dans MySQL. Il est disponible en format à deux ou quatre chiffres.

Remarque: Valeurs autorisées en format à quatre chiffres: 1901 à 2155. Valeurs autorisées en format à deux chiffres: 70 à 69, représentant les années 1970 à 2069.


Je ne pense pas qu’utiliser un entier ou un sous-type d’entier soit un bon choix. Tôt ou tard, vous devrez faire une autre date, comme des opérations dessus. Également en 2019, ne nous inquiétons pas trop de l'espace. Découvrez ce que ces 2 octets sauvés nous ont coûté en 2000.

Je suggère d'utiliser une date de l'année + 0101 convertie en une date vraie. De même, si vous avez besoin de stocker un mois d’année, stockez année + mois + 01 comme date exacte.

Si vous avez fait cela, vous serez capable de faire correctement des "trucs de date" dessus plus tard


Le stockage peut n'être qu'une partie du problème. Comment cette valeur sera-t-elle utilisée dans une requête?

Est-ce que cela va être comparé avec d'autres types de données date-heure ou est-ce que toutes les lignes associées auront aussi des valeurs numériques?

Comment géreriez-vous une modification des exigences? Avec quelle facilité pourriez-vous réagir à une demande de remplacement de l'année par une tranche de temps plus petite? c'est-à-dire qu'ils veulent maintenant une ventilation par trimestre?

Un type numérique peut être facilement utilisé dans une requête date / heure en ayant une table de correspondance à joindre contenant des éléments tels que les dates de début et de fin (1/1 / X à 12/31 / x), etc.


Si vous devez stocker une année dans la base de données, vous voudrez peut-être utiliser un type de données Integer (si vous ne définissez que le stockage de l'année) ou un type de données DateTime (ce qui implique de stocker une date qui est fondamentalement 1/1 / 1990 00:00:00 en format).


Utilisez un entier si tout ce que vous avez besoin de stocker est l'année. Vous pouvez également utiliser datetime si vous pensez qu'il y aura des calculs basés sur la date lors de l'interrogation de cette colonne.


L'INT ordinaire de 4 octets est trop gros, c'est un gaspillage d'espace!

Vous ne dites pas quelle base de données vous utilisez, je ne peux donc pas vous recommander un type de données spécifique. Tout le monde dit "utiliser un entier", mais la plupart des bases de données stockent des entiers sur 4 octets, ce qui est bien plus que nécessaire. Vous devez utiliser un entier sur deux octets (smallint sur SQL Server), qui permettra de mieux économiser de l'espace.





sqldatatypes