web-dev-qa-db-fra.com

Fonction SQL Server pour renvoyer la date minimale (1 janvier 1753)

Je recherche une fonction SQL Server pour renvoyer la valeur minimale pour datetime, à savoir le 1er janvier 1753. Je préférerais ne pas coder cette valeur de date dans mon script.

Est-ce que quelque chose comme ça existe? (À titre de comparaison, en C #, je pourrais simplement faire DateTime.MinValue) Ou devrais-je écrire cela moi-même?

J'utilise Microsoft SQL Server 2008 Express.

77
Jeremy

Vous pouvez écrire un Fonction définie par l'utilisateur qui renvoie la valeur de date min comme ceci:

select cast(-53690 as datetime)

Ensuite, utilisez cette fonction dans vos scripts, et si vous avez besoin de la changer, il n’ya qu’un seul endroit pour le faire.

Vous pouvez également utiliser cette requête si vous le préférez pour une meilleure lisibilité:

select cast('1753-1-1' as datetime)

Exemple de fonction

create function dbo.DateTimeMinValue()
returns datetime as
begin
    return (select cast(-53690 as datetime))
end

Utilisation

select dbo.DateTimeMinValue() as DateTimeMinValue

DateTimeMinValue
-----------------------
1753-01-01 00:00:00.000
76
RedFilter

Avez-vous vu l'objet SqlDateTime ? utilisez SqlDateTime.MinValue pour connaître votre date minimum (1 janvier 1753).

21
Naeem Sarfraz

Comme je ne peux pas commenter la réponse acceptée en raison de points de réputation insuffisants, mon commentaire est une réponse.

l'utilisation de select cast('1753-1-1' as datetime) doit échouer si elle est exécutée sur une base de données avec des paramètres régionaux n'acceptant pas une chaîne de données au format AAAA-MM-JJ.

Utilisez plutôt la select cast(-53690 as datetime) ou une Convert avec le format de date/heure spécifié.

13
Rune Andersen

Ce n'est pas le 1er janvier 1753, mais une distribution sélectionnée ('' as datetime) qui révèle: (Semble plus non initialisé pour moi de toute façon) 

4
Tomas Hesse

Entrez la date en tant que valeur native 'yyyymmdd' pour éviter les problèmes régionaux:

select cast('17530101' as datetime)

Oui, ce serait formidable si TSQL avait MinDate() = '00010101', mais pas de chance.

4
Frank Gillich

Voici un moyen rapide et très lisible d'obtenir la valeur de date min.

Créer une fonction

CREATE FUNCTION MinDate()
RETURNS DATETIME
AS
BEGIN
    RETURN CONVERT(DATETIME, -53690)

END

Appelle la fonction

dbo.MinDate()

Exemple 1

PRINT dbo.MinDate()

Exemple 2

PRINT 'The minimimum date allowed in an SQL database is ' + CONVERT(VARCHAR(MAX), dbo.MinDate())

Exemple 3

SELECT * FROM Table WHERE DateValue > dbo.MinDate()

Exemple 4  

SELECT dbo.MinDate() AS MinDate

Exemple 5

DECLARE @MinDate AS DATETIME = dbo.MinDate()

SELECT @MinDate AS MinDate
1

La plage de datetime ne changera pas car cela annulerait la compatibilité ascendante. Donc, vous pouvez le coder en dur.

0
Andomar

C'est ce que j'utilise pour obtenir la date minimum dans SQL Server. Veuillez noter qu'il est favorable à la mondialisation:

CREATE FUNCTION [dbo].[DateTimeMinValue]()
RETURNS datetime
AS
BEGIN
  RETURN (SELECT
    CAST('17530101' AS datetime))
END

Appeler en utilisant:

SELECT [dbo].[DateTimeMinValue]()
0
CarneyCode