Le serveur SQL peut implicitement convertir des chaînes sous la forme 'YYYYMMDD' en une date - toutes les autres chaînes doivent être explicitement converties. Voici deux blocs de code rapides qui effectueront la conversion à partir de la forme dont vous parlez :
La version 1 utilise des variables unitaires :
BEGIN
DECLARE @input VARCHAR(8), @mon CHAR(2),
@day char(2), @year char(4), @output DATETIME
SET @input = '10022009' --today's date
SELECT @mon = LEFT(@input, 2), @day = SUBSTRING(@input, 3,2), @year = RIGHT(@input,4)
SELECT @output = @year+@mon+@day
SELECT @output
END
La version 2 n'utilise pas de variables unitaires :
BEGIN
DECLARE @input CHAR(8), @output DATETIME
SET @input = '10022009' --today's date
SELECT @output = RIGHT(@input,4) + SUBSTRING(@input, 3,2) + LEFT(@input, 2)
SELECT @output
END
Les deux cas reposent sur la capacité du serveur SQL à effectuer cette conversion implicite.
1 votes
Le tsql a-t-il une fonction str_to_date comme MySQL ? dev.mysql.com/doc/refman/5.1/fr/
2 votes
OP veut mmddyyyy ; select convert(datetime,'12312009') -->>>_Msg 242, Level 16, State 3, Line 1 La conversion d'un type de données char en un type de données datetime a donné lieu à une valeur datetime hors limites.