2012-08-16 4 views
11

당신은 어떻게 SQL Server의 DateTime 데이터 형식의 열에 대한 LIKE 문을 수행합니까? 나는 다음과 같은 SQL을 실행하면SQL LIKE 문은

그것은 나에게 2009의 모든 날짜를 반환합니다.

SELECT * FROM MyTable where CheckDate LIKE '%2009%' 

을하지만, 내가 기대했던 모든 OCT의 11 월 & 12 월 날짜가 작업을 수행 할 수 있도록하려면 다음 :

SELECT * FROM MyTable where CheckDate LIKE '%2009-1%' 

그러나 이것은 나에게 아무것도 돌려주지 않습니다!

나는 사용자에게 그들이 날짜 문자열을 입력하고 입력 할 때 내가 데이터를 필터링 필터 옵션을 제공하고 있습니다. 따라서 '20'을 입력하면 날짜 내에 '20'이있는 모든 날짜가 반환됩니다 (2012 년 날짜 또는 1999 년 6 월 20 일과 같은 날짜 값이 될 수 있음)

아무도 도움을 줄 수 있습니까? ?

나는 SQL 서버를 사전에 2008 년

감사를 사용하고 있습니다.

+0

덕분에 귀하의 회신, 난 당신이 사용자가 이러한 기능을 원하는 확인 했 – Sun

+0

을 할 노력하고있어 무엇에 대한 자세한 세부 작업을 업데이트했습니다? 나는 한 번도 "한 달의 10 일 또는 10 월이나 2010 년에 일어난 모든 활동"을 찾고 싶지 않았습니다. –

답변

20

당신은 날짜의 일부를 추출하는 DATEPART 기능을 사용할 수 있습니다. 그것은 또한 당신이 달성하고자하는지에 대한 쿼리가 더 명시해야한다 : 같은 MONTHYEAR

SELECT * FROM MyTable 
where DATEPART(year,CheckDate)=2009 and 
     DATEPART(month,CheckDate) between 10 and 12 

(또한 특별히이 이름을 지정하는 기능을하지만, 모든 구성 요소에 액세스 할 수 있기 때문에 나는 일관성 DATEPART를 선호 datetime)

datetime에는 모든 종류의 문자열 형식을 사용하지 않는 것이 좋습니다. 문자열로 처리하는 것은 우리가 만나는 가장 큰 오류의 원인 중 하나입니다.

2

이 같은 것을 사용할 수 있습니다

SELECT * 
FROM MyTable 
WHERE CheckDate >= '2009-10-01' AND CheckDate < '2010-01-01'; 
+1

그리고 그 동안 - ** 모든 언어 버전의 SQL Server **에서 작동하는 ** 언어 독립 ** 날짜 형식 (예 : '20091001')을 사용하십시오. –

+3

위험합니다. 원본 쿼리가 'datetime'을 문자열로 변환하도록 강제했기 때문에 (항상 일관성있는 형식의 값을 생성합니다), 문자열에서 datetime으로 변환하고 지역 설정에 따라 실제로 아무것도 쿼리 할 수 ​​있습니다 2009 년 1 월 10 일 이후 –

5

당신은 varcharDateTime 열을 변환해야합니다 (어떤 이유로) Like 연산자를 사용해야하는 경우.

SELECT * 
FROM MyTable 
WHERE CONVERT(VARCHAR, CheckDate, 120) LIKE '%2009-1%'