web-dev-qa-db-fra.com

SQL Server: convertir ((int) année, (int) mois, (int) jour) en Datetime

Duplicata possible:
Créer une date avec T-SQL

J'ai un tableau de données qui stocke chaque année, mois et valeur journalière en pouces:

year | month | day
2009 |   1   |  1 
2008 |  12   |  2
2007 |   5   |  5

J'ai besoin de le convertir en valeur datetime, car je dois l'utiliser dans un datetime entre les opérations. Comment pourrais-je faire ça?

41
balint

Afin d'être indépendant des paramètres de langue et de paramètres régionaux, vous devez utiliser le format ISO 8601 YYYYMMDD - cela fonctionnera sur tout système SQL Server avec n'importe quelle langue et paramètre régional en vigueur:

SELECT
   CAST(
      CAST(year AS VARCHAR(4)) +
      RIGHT('0' + CAST(month AS VARCHAR(2)), 2) +
      RIGHT('0' + CAST(day AS VARCHAR(2)), 2) 
   AS DATETIME)
68
marc_s

Solution de datetime pure, ne dépend pas de la langue ou du DATEFORMAT, pas de chaînes

SELECT
    DATEADD(year, [year]-1900, DATEADD(month, [month]-1, DATEADD(day, [day]-1, 0)))
FROM
    dbo.Table
37
gbn

Vous pouvez convertir vos valeurs en un datetime "décimal" et le convertir ensuite en une colonne datetime réelle:

select cast(rtrim(year *10000+ month *100+ day) as datetime) as Date from DateTable

Voir ici également pour plus d'informations.

8
Dominik Fretz
SELECT CAST(CAST(year AS varchar) + '/' + CAST(month AS varchar) + '/' + CAST(day as varchar) AS datetime) AS MyDateTime
FROM table
2
Agent_9191