Guy
그는 물었다 12년 전
42

Sql Server 에서 datetime 문자열을 날짜 비교하십시오?

I have a '포함된 SQL Server 에서 DATETIME' 열 시간 요소.

예:

'14 AUG 2008 14:23:019'

  • What is the best * 만 선택할 수 있는 방법은 특정 일에 대한 기록을 무시하고 시간 부품?

예: (시간이 맞지 않으므로 부품과 되돌려줍니다 안전하지 행 없음)

DECLARE  @p_date DATETIME
SET      @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

SELECT *
FROM   table1
WHERE  column_datetime = @p_date

  • 참고: 그러나 이 사이트에 대한 수거 및 기법 역시 적어두기 유라유라테이코쿠 다운되어도 갈 수 있습니다 다음 I& 잊지 # 39 m 로, 이 질문의 답을 MSSQL 요소라고 할 수 있는 나만의 게시물로의 DATETIME 물건을 항목를 내가 가장 SQLBOL.* 조회

  • 업데이트 * 예 좀 더 구체적으로 밝혔다.

, # 39 를 다운되어도 모드용 편집하십시오 죄송하지만 i& 잘못된 대답 (대답을 잘못된 결과를 반환하는) 숨기지 않았다.

@Jorrit: 여기서 (# 39, & # 39, 20080813& date&gt. ' # 39, & # 39 와 date&lt 20080815&;;) '가 13 위, 반품하십시오 14.

@wearejimbo: ! 너회들 닫으십시오 담배 있지 않지만, 배지 받았다. 14/08/2008 로 씀 너회가 놓친 레코드전자문서의 23 59 001 23 59 999 (즉, 1 초 미만 자정 이전에.)

답변 18 개

기법 1:

 DECLARE @p_date DATETIME
 SET     @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

 SELECT  *
 FROM    table1
 WHERE   column_datetime >= @p_date
 AND     column_datetime < DATEADD(d, 1, @p_date)

이는 모든 인덱스화할 on & # 39 의 장점은 사용할 계획이라고 column_datetime& # 39;; 있는 경우.

Nick DeVore
Larry OBrien
그는 12년 전 댓글을 달았습니다
11

14일 8월 2008년 캐스트 (& # 39, & # 39 있다고 믿는다. tpc. DateTime) 는 조금 더 좋습니다. 내 생각엔 it& # 39 에 비해 조금 더 읽고 있다고 믿지만 그 캐스트 (CAST) 가 더 이동형이든지 변환 () () 는 ANSI sql 92 호환됩니까 및 - 99

Möoz
그는 7년 전 댓글을 달았습니다
1

이 사이에 있는 대표 키워드로 오토메이티드 사용할 수 있습니다.

Bondolin
그는 7년 전 댓글을 달았습니다
1

실제로, 이 사이에 > = / &lt @borhanmooz 캡처하지 않습니다. 주어진 베스위니스 코드. 완전히 포함) 간 (http://technet.microsoft.com/en-us/library/ms187922.aspx &quot Value&quot 결과,,).

Sql Server 2008년 에서 새 날짜가 datatype 사용할 수 있습니다

DECLARE @pDate DATE='2008-08-14'  

SELECT colA, colB
FROM table1
WHERE convert(date, colDateTime) = @pDate  

@Guy. 이 솔루션은 그냥 그랬다고 확장할 수 있는 발견하리니 한다고 생각합니다. 질의 실행 계획 의 투명지에 보면 기존 질의입니다.

[내거냐] 및 2:

그냥 해, 달, 날 값을 비교합니다.

Declare @DateToSearch DateTime
Set @DateToSearch = '14 AUG 2008'

SELECT * 
FROM table1
WHERE Year(column_datetime) = Year(@DateToSearch)
      AND Month(column_datetime) = Month(@DateToSearch)
      AND Day(column_datetime) = Day(@DateToSearch)

난 보통 변환하시겠습니까 날짜-시간 지금까지 그 비교하십시오 다음과 같습니다.

SELECT 'Same Date' WHERE CAST(getDate() as date) = cast('2/24/2012 2:23 PM' as date)

또는

SELECT 'Same Date' WHERE DATEDIFF(dd, cast(getDate() as date), cast('2/24/2012 2:23 PM' as date)) = 0

좋은 점) 에 대한 답을 인덱스화할 수락됨 있습니다.

그래도 정말 대해서만 검색할 경우 특정 날짜를 날짜 범위 '' 또는 '자주' 관심용 내가 찾은 최상의 솔루션을 포함하고 있는 열 수밖에 없다 '는 다른 추가 유지하고 계산됩니까 데이터베이스에구성원을 테이블' 이 날짜 및 추가 인덱스화할 열:

ALTER TABLE "table1" 
    ADD "column_date" AS CONVERT(DATE, "column_datetime") PERSISTED

지수가 추가 있는 열:

CREATE NONCLUSTERED INDEX "table1_column_date_nu_nci"
ON  "table1" ( "column_date" ASC )
GO

그런후에도 너회의 훨씬 빠르게 검색할 수 있습니다.

DECLARE  @p_date DATE
SET      @p_date = CONVERT( DATE, '14 AUG 2008', 106 )

SELECT   *
FROM     table1
WHERE    column_date = @p_date

van
그는 10년 전 댓글을 달았습니다
0

그리고, 내가 알고 있는 것이 아니라 대부분의 데이터베이스 언어 중 하나를 사용하여 ISO 형식식 제안하세요 날짜에 따라 로케일에 년-월-일 'like' /

이 같은 일이?

SELECT  *
FROM    table1
WHERE   convert(varchar, column_datetime, 111) = '2008/08/14'

기술은 2:

DECLARE @p_date DATETIME
SET     @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

SELECT  *
FROM    table1
WHERE   DATEDIFF( d, column_datetime, @p_date ) = 0

만약 column_datetime 필드이므로 인덱스화되며 및 있지 않을 것으로 보인다 (또는 인덱스화할 사용할 수 있는 가능성은 거의 없다) 을 사용하여 다테디프 () 는 짧은.

  • MS SQL Server:* DATETIME 필드에 날짜 부분을 어떻게 다운로드합니까?

사용 중 가장 빠른 및 산뜻한 방법이 있습니다

DATEADD(dd, DATEDIFF( dd, 0, @DAY ), 0)

날짜, 시간 없이 &quot 방지한다 CPU 깨기 문자열로 변환한 후 변환하십시오 뒤로를 again&quot. 없다.

또한 내부 구축상의 작업자쪽에서 &quot 표시하지 않으며, 시간 부분은 fraction&quot 표현됩니다. 날짜.

  • 날짜 내려받습니다 이달 1 일 *

DATEADD(dd, DATEDIFF( dd, -1, GetDate() - DAY(GetDate()) ), 0)

  • 날짜 프롬 내려받습니다 1 년 전 *

DATEADD(m,-12,DATEADD(dd, DATEDIFF( dd, -1, GetDate() - DAY(GetDate()) ), 0))

이 함수는 캐스트 (Floor (캐스트 (제다테 () 에 Float)) 를 DateTime) 되돌려줍니다 datetime 데이터 형식 함께 한 시간 부분은 그러하매 제거하고 사용할 수 있게 했다.

Select
*
Table1
Where
Cast(Floor(Cast(Column_DateTime As Float)) As DateTime) = '14-AUG-2008'

또는

DECLARE  @p_date DATETIME
SET      @p_date = Cast('14 AUG 2008' as DateTime)

SELECT   *
FROM     table1
WHERE    Cast(Floor(Cast(column_datetime As Float)) As DateTime) = @p_date

GateKiller
Manuel Ferreria
그는 11년 전 댓글을 달았습니다
0

39, t won& 여러 기능을 현장에서 발려짐 경우 인덱스된) 이 전체 테이블 붙여넣습니다 변환하십시오 스캑?

Sql server 에서 사용하는 문자열 비교 날짜 비교될 수 있습니다. 예:

DECLARE @strDate VARCHAR(15)
SET @strDate ='07-12-2010'

SELECT * FROM table
WHERE CONVERT(VARCHAR(15),dtInvoice, 112)>= CONVERT(VARCHAR(15),@strDate , 112)

DECLARE @Dat

SELECT * 
FROM Jai
WHERE                                                                                                          
CONVERT(VARCHAR(2),DATEPART("dd",Date)) +'/'+                                                              
             CONVERT(VARCHAR(2),DATEPART("mm",Date)) +'/'+              
                     CONVERT(VARCHAR(4), DATEPART("yy",Date)) = @Dat

39 isn& 할 때는 정확히 어떻게 알아 볼 수 있지만, t 이 시작:

SELECT *
FROM (SELECT *, DATEPART(yy, column_dateTime) as Year, 
      DATEPART(mm, column_dateTime) as Month, 
      DATEPART(dd, column_dateTime) as Day 
      FROM table1)
WHERE Year = '2008'
AND Month = '8'
AND Day = '14'

SELECT  *
FROM    table1
WHERE   CONVERT(varchar(10),columnDatetime,121) = 
        CONVERT(varchar(10),CONVERT('14 AUG 2008' ,smalldatetime),121)

이렇게 하면 다타티메 변환하십시오 및 구체화하십시오 agent. 형식의 varchar YYYY-MM-DD&quot ";).

하지만 이것은 매우 추악한 노력해야 합니다

Sql 에서 사용되고 있는 지정된 날짜 형식은 많다. Https://msdn.microsoft.com/en-in/library/ms187928.aspx) 는 다음과 같은 뜻이 있다

날짜 선택 및 변환 및 열 varchar 비교.

문법:

SELECT * FROM tablename where CONVERT(datetime,columnname,103) 
    between '2016-03-01' and '2016-03-03'

&lt &gt! - -;;

In CONVERT(DATETIME,COLUMNNAME,103) "103" SPECIFIES THE DATE FORMAT as dd/mm/yyyy

가장 좋은 방법은 단순히 SQL 날짜 () 함수를 사용하여 부품 푸십시오 날짜:

SELECT * 
FROM table1
WHERE DATE(column_datetime) = @p_date;

SELECT * FROM tablename
WHERE CAST(FLOOR(CAST(column_datetime AS FLOAT))AS DATETIME) = '30 jan 2012'

SELECT CONVERT(VARCHAR(2),DATEPART("dd",doj)) + 
    '/' + CONVERT(VARCHAR(2),DATEPART("mm",doj)) + 
    '/' + CONVERT(VARCHAR(4),DATEPART("yy",doj)) FROM emp

Sql server 의

DECLARE @p_date DATE

SELECT * 
FROM table1
WHERE [email protected]_date

C # 에서 문자열을 날짜 값을 토쇼트다테스트링 () 함수를 사용하여 짧은 패스. 예제: 다테바리베르스토쇼트다테스트링 ();