2012-10-26 5 views
0

형식이 MMMDD 인 nvarchar (5) 열의 데이터가 있습니다 (예 : OCT26). 내 select 문을 사용하여 현재 연도가있는 datetime 데이터 형식으로 변환 한 다음 datetime 값을 별칭, 예를 들어 UsefulDate로 저장하고 싶습니다. 그래서 10-26-2012와 같은 것입니다.SQL : MMMDD 문자열을 Datetime으로 변환

같은

뭔가 : UsefulDate

정확한 형식은 중요하지 않습니다 AS (SQL이 일을 얻는대로) SELECT; 난 단지 두 날짜를 더 크고 작게 연산자와 비교할 수 있어야합니다. 또한 때때로 열이 비어있게됩니다. 이 경우 별칭도 공백으로 설정하고 싶습니다. 이것이 가능한가?

도움 주셔서 감사합니다.

+0

- 유효한 'DATETIME'만으로는 한 달에 하루를 파싱 할 수 없습니다. – Oded

+0

@Oded : OP에서 질문의 현재 연도를 지정했습니다. –

답변

1

당신과 함께 현재 연도와 날짜 형식 MMMDD에서 VARCHAR 필드를 변환 할 수 있습니다

select convert(datetime,'OCT26'+','+cast(year(getdate()) as varchar),107) 

그래서 쿼리는 무언가 같이 될 것이다 : 당신은 일년에 제공해야합니다

select convert(datetime,case varcharDate when '' then null else varcharDate end + 
       ','+cast(year(getdate()) as varchar),107) as UsefulDate 
from table 
+0

응답을 많이 보내 주셔서 감사합니다. 그러나 공백 값에 도달하면 오류가 발생하는 것으로 보입니다. "nvarchar 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어나는 값이 나타납니다." –

+0

@Brent - 업데이트 된 게시물보기 –

+0

고맙습니다! 그것은 위대한 작품. –

0
select CASE WHEN ISDATE(mmmdd+' '+right(year(getdate()),4)) = 1 
      THEN CAST(mmmdd+' '+right(year(getdate()),4) as datetime) 
      END UsefulDate, * 
    from tbl 
+0

대단히 감사합니다! 그러나이 값은 공백 값에 도달하면 기본적으로 2012-01-01로 설정됩니다. 이 값들을 비워 두는 방법이 있습니까? –

+0

@Brent 빈칸 – RichardTheKiwi

+0

에 대한 대답이 업데이트되었는데 어떤 이유로 든 여전히 2012-01-01을 기본값으로 사용하고 있습니다. SQL을 사용하여 case 문을 사용할 수있는 방법이 정말 멋지다. 네가 할 수 있다는 것을 결코 알지 못했다. –

관련 문제