web-dev-qa-db-ja.com

SQL SERVER 2008で文字列から日付や時刻を変換するときに変換が失敗しました

私は以下の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'

上記のSQLを実行すると、以下の例外がスローされました。

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

5
Rithik_Star

last_accessed_onであるDateTime2に挿入しようとしている場合、SQLがフォーマットしないvarcharに変換しているという問題があります。分からない。

コードをこれに変更すると、機能するはずです。日付の形式が次のように変更されていることに注意してください。YYYY-MM-DD 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'

または、CASTを使用する場合は、次のものに置き換えます。

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

これは SQL ISO日付形式 を使用しています。

8
Tanner

Last_accessed_onのように見えますが、これは日付時刻であり、'23 -07-2014 09:37:00 'をvarcharに変換しています。これは機能せず、変換エラーが発生します。試してみる

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

ただし、キャストを回避し、'23-07-2014 09:37:00'で更新できると思います。形式が正しいことを考えると、機能するはずです。

last_accessed_on(これはDateTime2 type)でVarchar値を渡そうとしているため、クエリは機能しません。

あなたのクエリは

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