Convertir nvarchar à ce jour et get des données entre deux date

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 .