datatime을 nvarchar 또는 다른 문자 유형으로 저장하면 안됩니다. datetime은 datetime 필드에 속합니다. 그것을 비교하면서 그것을 변환하면, 당신은 끔찍한 성능을 얻을. 현재 데이터 모델에 문제가있는 경우 새 계산 된 필드를 추가 할 수 있습니다. 다음은 PERSISTED 계산 열로의 변환입니다. PERSISTED 계산 열은 인덱싱 할 수있는 실제 값을가집니다.
이 예제는 지옥처럼 보입니다. 그러나 귀하의 필드를 계산합니다. 정상적인 계산 열을 사용하기는 쉽지만 성능 문제가 발생합니다. YourColumn의 모든 값에 유효한 datetime 값이 있어야합니다.
CREATE TABLE #t(YourColumn varchar(18))
INSERT #t
values ('3/19/2013 4:18:59'),
('3/9/2013 5:18:59'),
('01/9/2013 6:18:59'),
('12/9/2013 17:18:59')
ALTER TABLE #t
ADD CDateColumn AS
CONVERT(datetime,
LEFT(STUFF(YourColumn, 1, CHARINDEX('/', YourColumn, 4), ''), 4)
+'-' + SUBSTRING('0' + YourColumn, PATINDEX('%__/%', ' ' +YourColumn), 2) + '-'
+RIGHT('0'+REPLACE(LEFT(STUFF(YourColumn, 1, CHARINDEX('/', YourColumn), ''), 2), '/', ''), 2) + 'T'
+RIGHT('0'+REPLACE(LEFT(STUFF(YourColumn, 1, CHARINDEX(' ', YourColumn), ''), 2), ':', ''), 2)
+RIGHT(YourColumn, 6), 126) PERSISTED
결과는 다음과 같습니다
SELECT * FROM #t
YourColumn CDateColumn
3/19/2013 4:18:59 2013-03-19 04:18:59.000
3/9/2013 5:18:59 2013-03-09 05:18:59.000
01/9/2013 6:18:59 2013-01-09 06:18:59.000
12/9/2013 17:18:59 2013-12-09 17:18:59.000
NB :
CONVERT(datetime,activateDate,0)
그리고 정확하게 '작동하지 않는'무엇 : 당신이 그것을 변경하는 경우 현재 스크립트가 작동합니까? 오류 메시지가 나타 납니까? 'activateDate' 열에 datetime 형식이 유효하지 않을 수 있습니까? – NickyvV
'작동하지 않음'은 무엇을 의미합니까? 어떤 오류 메시지? – Paolo
내 업데이트 된 질문을 확인하십시오 – barsan