Je recueille des données entre deux date 01/12/2014 et 31/12/2014 mais mon type de données sql dans nvarchar
ma requête est-elle correcte?
SELECT * from customer where date >= convert(datetime, '01/12/2014', 105) AND date <= convert(datetime, '31/12/2014', 105)
Résultat
Msg 242, Level 16, State 3, Line 1 The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
quelqu'un peut-il résoudre ce problème …
comme je sais que vous devez séparer les différentes parties d'une date avec "-" pas avec "/" dans le format 105. voici un exemple:
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy
donc vous devez réécrire votre code comme:
SELECT * from customer where date >= convert(datetime, '01-12-2014', 105) AND date <= convert(datetime, '31-12-2014', 105)
Le format de votre string est 'dd/mm/yyyy'
est 103, pas 105 (qui est 'dd-mm-yyyy'
). Donc, utilisez simplement le bon format:
SELECT * FROM customer WHERE [date] >= CONVERT(datetime, '01/12/2014', 103) AND [date] <= CONVERT(datetime, '31/12/2014', 103)
Si votre type de date est nvarchar, pourquoi ne pas essayer comme ceci:
SELECT * FROM customer WHERE date >= '01/12/2014' AND date <= '31/12/2014'
Avons-nous vraiment besoin de convertir?
SELECT * FROM DBO.CUSTOMER WHERE CAST([date] AS DATE) >= '01/12/2014' AND CAST([date] AS DATE) <= '31/12/2014'
Je vous suggère d'utiliser ceci:
(Je pense que la conversion en varchar
est plus logique)
SELECT * FROM customer WHERE CONVERT(varchar, [date], 103) BETWEEN '01/12/2014' AND '31/12/2014'
Dans les styles de date et d'heure ; 103
est pour British/French
norme British/French
avec le siècle ( yyyy
) comme ce dd/mm/yyyy
.