2012-10-16 2 views
2

왜이 문장이 성공합니까?문자열에서 날짜 및/또는 시간을 변환 할 때 변환하지 못했습니다.

SELECT CAST('08:50' as time) 

하지만이 중 하나가 실패합니까? tmrec은 nvarchar (6) 열이며 같은 값인 '08:50'을 포함합니다. 지난 1 시간 이래 미친 짓이야.

SELECT TOP 1 CAST(tmrec as time) 
    FROM  Instr 
    WHERE igrp = 'JD' 
    ORDER BY ino , smallin 

This screenshot는 1 쿼리의 결과를 보여줍니다. 그것은 08:50을 포함합니다. 그러나 두 번째 쿼리에서 오류가 발생합니다.

편집 :

심지어이 작동하지 않는 변환은 가져온 레코드에 적용되는 것을 보장 : 잘못된 데이터를 찾기 위해, 일반적으로

SELECT CAST(tmrec as time) 
    FROM 
     (
      SELECT TOP 1 tmrec 
      FROM [ccwise-courts].[dbo].[INSTR] 
      WHERE igrp = 'JD' 
      ORDER BY ino , smallin 
     ) v 
+0

문자열을 "..."대신 "날짜"및 "시간"값을 저장하는 이유를 묻는 것이 좋습니다. 시간? – Leigh

답변

3

, 당신은 같은 쿼리를 사용할 수 있습니다 이 :

SELECT TOP(100) '-->' + REPLACE(tmrec, ' ', '*') + '<--bad' 
FROM Instr 
WHERE ISDATE(tmrec) = 0 

그리고 당신은 여전히 그것을 할 수없는 경우, 당신은 캘리포니아를 필터가있는 WHERE 전에 SELECT 절에 SQL 서버 처리 CAST를 다루는이 Connect item 있습니다

SELECT TOP(100) '-->' + REPLACE(tmrec, ' ', '*') + '<--bad', 
    Char1 = ascii(substring(tmrec,1,1)), 
    Char2 = ascii(substring(tmrec,2,1)), 
    Char3 = ascii(substring(tmrec,3,1)), 
    Char4 = ascii(substring(tmrec,4,1)), 
    Char5 = ascii(substring(tmrec,5,1)), 
    Char6 = ascii(substring(tmrec,6,1)) 
FROM Instr 
WHERE ISDATE(tmrec) = 0 

: N (I 질문 당 6까지 이동 여기에) 포함 된 문자의 특정 ASCII 코드를 나열 적용되었습니다. 이를 극복하기 위해 버그 보고서에 명시된 바와 같이

+0

나는 나쁜 문자를 보여줄 길을 좋아한다. :) –

+0

나는 이해하지만, 왜 '08 : 50 '이 작동하지 않는지 이해할 수 없다. – Jack

+0

행과 열 tmrec에는 '08 : 50 '값이 있습니다. 나는 몇 분 안에 스크린 샷을 게시 할 것이다. – Jack

관련 문제