web-dev-qa-db-fra.com

La conversion a échoué lors de la conversion de la date et / ou de l'heure à partir d'une chaîne de caractères dans SQL SERVER 2008

J'ai ci-dessous SQL.

 UPDATE  student_queues
 SET  Deleted=0,  
      last_accessed_by='raja', 
      last_accessed_on=CONVERT(VARCHAR(24),'23-07-2014 09:37:00',113)
 WHERE std_id IN ('2144-384-11564') 
   AND reject_details='REJECT'

lorsque j'ai exécuté le SQL ci-dessus, l'exception ci-dessous a été levée.

Conversion failed when converting date and/or time from character string.

5
Rithik_Star

Si vous essayez de vous insérer dans last_accessed_on, qui est un DateTime2, votre problème vient du fait que vous le convertissez en varchar dans un format que SQL ne comprend pas.

Si vous modifiez votre code en cela, cela devrait fonctionner, notez que le format de votre date a été changé en: AAAA-MM-JJ hh: mm: ss :

UPDATE  student_queues 
SET  Deleted=0, 
     last_accessed_by='raja', 
     last_accessed_on=CONVERT(datetime2,'2014-07-23 09:37:00')
WHERE std_id IN ('2144-384-11564') AND reject_details='REJECT'

Ou si vous souhaitez utiliser CAST, remplacez par:

CAST('2014-07-23 09:37:00.000' AS datetime2)

Cela utilise le SQL ISO Date Format .

8
Tanner

Il semble que last_accessed_on soit une date et que vous convertissez '23 -07-2014 09:37:00 'en varchar. Cela ne fonctionnerait pas et vous donnerait des erreurs de conversion. Essayer

last_accessed_on= convert(datetime,'23-07-2014 09:37:00', 103)  

Je pense que vous pouvez éviter le casting et mettre à jour avec '23-07-2014 09:37:00'. Cela devrait fonctionner étant donné que le format est correct.

Votre requête ne fonctionnera pas car dans last_accessed_on (qui est de type DateTime2), vous essayez de passer une valeur Varchar.

Votre requête serait

UPDATE  student_queues SET  Deleted=0 ,  last_accessed_by='raja', last_accessed_on=convert(datetime,'23-07-2014 09:37:00', 103)  
 WHERE std_id IN ('2144-384-11564') AND reject_details='REJECT'
2
Mez
DECLARE @FromDate DATETIME

SET @FromDate =  'Jan 10 2016 12:00AM'

DECLARE @ToDate DATETIME
SET @ToDate = 'Jan 10 2017 12:00AM'

DECLARE @Dynamic_Qry nvarchar(Max) =''

SET @Dynamic_Qry='SELECT

(CONVERT(DATETIME,(SELECT 
     CASE WHEN (  ''IssueDate''   =''IssueDate'') THEN 
               EMP_DOCUMENT.ISSUE_DATE 
          WHEN (''IssueDate'' =''ExpiryDate'' ) THEN       
               EMP_DOCUMENT.EXPIRY_DATE ELSE EMP_DOCUMENT.APPROVED_ON END   
          CHEKDATE ), 101)  

)FROM CR.EMP_DOCUMENT  as EMP_DOCUMENT WHERE 1=1 

AND  (
      CONVERT(DATETIME,(SELECT 
        CASE WHEN (  ''IssueDate''   =''IssueDate'') THEN
                 EMP_DOCUMENT.ISSUE_DATE 
             WHEN (''IssueDate'' =''ExpiryDate'' ) THEN EMP_DOCUMENT.EXPIRY_DATE 
             ELSE EMP_DOCUMENT.APPROVED_ON END 
             CHEKDATE ), 101)  
) BETWEEN  '''+ CONVERT(CHAR(10), @FromDate, 126) +'''  AND '''+CONVERT(CHAR(10),  @ToDate , 126
)
+'''  
'

print @Dynamic_Qry

EXEC(@Dynamic_Qry) 
1
Praveen P K