2011-01-15 18 views
1

저는 개발 초보자이며 SQL Server에서 날짜를 다루는 전문적인 방법을 알고 싶습니다. 내 응용 프로그램에서는 주로 DATE 데이터 유형을 다루며 시간 부분에는 관심이 없습니다. 또한 dd/mm/yyyy 형식을 유지하십시오.SQL Server 날짜 쿼리

예를 들어, 다음 구조의 테이블이있는 경우를 예로들 수 있습니다.

EmployeeTable 
--------------- 
emp_id int 
emp_name varchar(50) 
join_date date 

나는 시작 날짜와 종료 날짜 사이에 "join_date을"쿼리 및 저장 프로 시저 기준으로 일/월/년을 전달하려는 및 조회 할 경우.

날짜를 처리하는 전문적인 방법은 무엇입니까? 나는 항상 varchar에서 날짜를 변환 한 다음 비교할 일을하는 것이 프로답지 않은 방법이라고 생각합니다. 그래서 나는 그것을 감사하는 표본으로 절차에서 그것을하는 방법을 안내해주십시오.

+0

어떤 데이터 형식입니까? 나는 dd.mm.yyyy (대부분의 독일인이 사용하는) mm/dd/yyyy (미국에서 사용됨) 및 yyyy-mm-dd가 자연스럽게 정렬되는 날짜 형식을 좋아하는 과학적 경향이있는 사람이 사용한다는 것을 알고 있습니다. –

+2

태그 SQL-server-2005가 적용되지 않습니다. 날짜 데이터 형식이 SQL-Server 2008에 추가되었으므로 –

답변

3

SQL은 날짜를 잘 처리하므로 날짜를 변환 할 필요가 없습니다.

당신이 date 유형과 같은 매개 변수에 전달하는 경우에, 당신은 아무 문제가 없습니다 :

CREATE PROCEDURE myProc 
    @start date, 
    @end date 
AS 
    SELECT emp_id, emp_name, join_date 
    FROM EmployeeTable 
    WHERE join_date BETWEEN start AND end; 
+0

테스트 해보고 대답을 표시하겠습니다. 감사합니다. – user239684

+0

감사합니다. 전나무님께 도움을 청합니다. – user239684

2

특정 방식으로 출력에 날짜를 포맷 할 않는 한, 날짜를 변환 할 이유가 없습니다를 varchar으로 date 데이터 유형을 사용 중이므로 SQL에서 비교를 수행하도록하십시오. 당신이 날짜 범위에서 기간을 비교하려면

, 당신은이를 사용할 수 있습니다

WHERE join_date BETWEEN '2010-01-01' AND '2010-12-31' 
2

날짜로 날짜를 유지합니다. 문자열로 변환하지 마십시오. 그것은 불필요합니다. 코드에서 SQL Server로 날짜를 보내면 매개 변수로 처리하면 문자열의 올바른 형식에 대해 걱정할 필요가 없습니다.

SQL 서버 날짜 데이터 형식 :

  • 날짜 : 0001-01-01
  • SMALLDATETIME 9999-12-31 통해 : 1900-01-01 2079년 6월 6일 (정확도 을 통해 일분)
  • 날짜 시간 : 1 월 (1), 1753 을 통해 9999 년 12 월 31 일 (정확도 밀리 초)
  • DATETIME2 : 0001-01-01 통해 9999-12-31 (아큐 racy 100 나노초)
0

SQL Server에 제공되는 모든 쿼리는 TEXT 형식으로 처리된다는 점은 중요하지 않습니다. 어떤 단계에서는 데이터 액세스 레이어 (OLEDB, Native, ADO)의 언어 및 번역 설정에 따라 텍스트 형식으로 바뀌므로 날짜는 항상 "텍스트"로 표시됩니다.

사용할 최상의 형식은 SQL Server의 경우 항상 YYYYMMDD입니다. YYYY-MM-DD조차 잘못된 날짜 형식 설정에 대해 잘못 될 수 있습니다. 이 예제를 참조하십시오.

set dateformat dmy -- more than common for non-US locations 
select CONVERT(varchar, convert(datetime, '2010-12-31'), 112) 

그것은 실패합니다.

Msg 242, Level 16, State 3, Line 3 
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value. 

여기에는 SQL 문에 포함 된 날짜를 작성해야 할 때 사용할 형식이 포함됩니다. 가능하지만, SQL 인젝션 TSQL을 생성 할 때 DB 연결 층이 올바른 형식을 확인시키는

    1. 방지와 같은 혜택에 대한 쿼리를 매개 변수화하시기 바랍니다 때
    2. SQL 서버에
    3. 쿼리 계획 재사용
    4. 포인트 3 = 성능이 우수한 쿼리와보다 효율적인 SQL Server