Sélectionnez la date maximale de la table du server sql enregistrée en tant que données varchar au format "mm-yyyy"

Dans une table, datatables de date sont enregistrées au format mm-yyyy et son type de données est varchar.

Maintenant, je veux récupérer la date MAX .

La date est enregistrée dans le format ci-dessous et il existe des milliers d'loggings:

 7-1986 10-2012 6-1989 5-1975 7-1974 7-1961 12-1987 10-1975 6-1959 10-2002 12-1991 11-1961 6-1966 12-1959 10-1956 12-1953 6-1999 2-1989 

J'ai essayé:

 SELECT MAX(CONVERT(DATETIME, '1-'+[Date], 105)) As MAXDate FROM tablename 

Mais il returnne 2015-12-01 00:00:00.000 , mais il doit être 2015-01-01 00:00:00.000 , car la date MAX est enregistrée comme 1-2015 .

Tu peux essayer.

 SELECT Max(cast('1-'+Date as DateTime)) As MAXDate FROM tablename 

Tu pourrais essayer:

 SELECT MAX(CAST(RIGHT(Datessortingng, 4) + RIGHT('00' + SUBSTRING(DateSsortingng, 1, CHARINDEX('-', DateSsortingng, 1) - 1), 2) + '01' AS SMALLDATETIME)) FROM [YourTable] 

ÉCHANTILLON:

 CREATE TABLE #Dates(DateSsortingng VARCHAR(10)) INSERT INTO #Dates VALUES ('7-1986'), ('10-2012'), ('6-1989'), ('5-1975'), ('7-1974'), ('7-1961'), ('12-1987'), ('10-1975'), ('6-1959'), ('10-2002'), ('12-1991'), ('11-1961'), ('6-1966'), ('12-1959'), ('10-1956'), ('12-1953'), ('6-1999'), ('2-1989'); ;WITH CTE AS( SELECT DateSsortingng, [Month] = SUBSTRING(DateSsortingng, 1, CHARINDEX('-', DateSsortingng, 1) - 1), [Year] = RIGHT(Datessortingng, 4), [Date] = CAST(RIGHT(Datessortingng, 4) + RIGHT('00' + SUBSTRING(DateSsortingng, 1, CHARINDEX('-', DateSsortingng, 1) - 1), 2) + '01' AS SMALLDATETIME) FROM #Dates ) SELECT MAX([Date]) AS MaxDate FROM CTE 

LES DONNÉES

 DateSsortingng ---------- 7-1986 10-2012 6-1989 5-1975 7-1974 7-1961 12-1987 10-1975 6-1959 10-2002 12-1991 11-1961 6-1966 12-1959 10-1956 12-1953 6-1999 2-1989 

RÉSULTAT

 MaxDate ----------------------- 2012-10-01 00:00:00 

Vous pouvez utiliser la fonction STUFF pour append -1 :

 SELECT MAX(CONVERT(DATETIME, STUFF([Date], CHARINDEX('-', [Date]), 0, '-1'), 121))