문제

SELECT GETDATE()

을 반환합니다. 2008-09-22 15:24:13.790

내가 원하는 날짜가 없는 부분은 시간부: 2008-09-22 00:00:00.000

어떻게 받을 수 있는?

도움이 되었습니까?

해결책

SQL Server 2008 고 높은,당신 CONVERT 날짜:

SELECT CONVERT(date, getdate())

이전 버전에서,다음을 수행할 수 있습니다:

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))

예를 들어

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

2008-09-22 00:00:00.000

장점:

  • No varchar<->datetime 변환 필요
  • 없음에 대해 생각해야 locale

에 의해 제안 마이클

이 변: SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, getdate()))

select getdate()

SELECT DATEADD(hh, DATEDIFF(hh, 0, getdate()), 0)
SELECT DATEADD(hh, 0, DATEDIFF(hh, 0, getdate()))

SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, getdate()))

SELECT DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)
SELECT DATEADD(mm, 0, DATEDIFF(mm, 0, getdate()))

SELECT DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)
SELECT DATEADD(yy, 0, DATEDIFF(yy, 0, getdate()))

출력:

2019-04-19 08:09:35.557

2019-04-19 08:00:00.000
4763-02-17 00:00:00.000

2019-04-19 00:00:00.000
2019-04-19 00:00:00.000

2019-04-01 00:00:00.000
1903-12-03 00:00:00.000

2019-01-01 00:00:00.000
1900-04-30 00:00:00.000

다른 팁

SQLServer2008 이제는'날짜'데이터의 유형을 포함하는 날짜와 시간 구성 요소입니다.을 사용하는 사람 SQLServer2008 년 넘어서는 다음을 수행할 수 있습니다.

SELECT CONVERT(date, GETDATE())

는 경우에는 SQL 을 사용하여 2008 년과 상기:

select cast(getdate() as date)

DATEADD 고 날짜보다 더 나은 변환하 varchar.모두 쿼리에는 동일한 실행 계획이지만,실행 계획이 가 주로 대 데이터 액세스 전략과하지 않는 항상을 공개하는 암시적에 관련된 비용을 CPU 시간을 촬영을 수행하든 조각합니다.두 경우 쿼리가 실행된 테이블에 대해 수백만의 행 CPU 시간을 사용하여 날짜할 수 있는 가까운 거다 1/3 의 변환을 CPU 시간!

보 실행 계획에 대한 쿼리:

set showplan_text on
GO 

모두 DATEADD 고 날짜 실행됩니다 CONVERT_IMPLICIT.

지만 변환 솔루션은 더욱 간편하고 쉽게 읽기 위해 일부,그것은 느려집니다.할 필요가 없으로 다시 캐스팅 datetime(이를 암시적으로 수행하여 서버).도 없이 실시에 필요 날짜를 위한 방법 DateAdd 이후로 결과의 정수한다는 암시적으로 다시 변환하는 날짜/시간입니다.


변환을 선택하(varchar,MyDate,101)에서 DatesTable

  |--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

선택 DATEADD(dd0,날짜(dd0,MyDate))에서 DatesTable

  |--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,'1900-01-01 00:00:00.000',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0))))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

를 사용하여 바닥()로@digi 제안이 성능에 가까운 날짜 있지만,권장하지 않음으로 캐스팅 datetime 데이터 입력을 떠고 다시되지 않은 항상 수익률은 원래 값입니다.

기억하는 사람:믿지 않는 사람.서 통계,그리고 그것을 자신을 테스트!

주의해야 할 때 당신 테스트 결과입니다.선택하는 많은 클라이언트에게 행을 숨기는 것이 성과에 차이 becauses 그것은 더 이상 보내는 행 네트워크를 통해 그것보다는 계산을 수행하기.그래서인지 확인하는 작업에 대한 모든 행에 의해 수행되는 서버가 행 클라이언트로 보내집니다.

가 될 것으로 보인 혼란을 위한 일부 사람들에 관한 경우 캐시 최적화에 영향을 쿼리를 처리합니다.실행하는 두 개의 쿼리에서 동일한 또는 배치에서 분리 배치에 효과가 없습니다할 수 있도록 하거나 만료하는 수동으로 캐시거나 또는 단순히 실행하는 쿼리를 다시 앞으로 여러 번 나옵니다.어떤 최적화에 대한 쿼리를#2 또한 것에 영향을 미칠 모든 후속 쿼리,그래서 밖으로 던져 실행#1 당신이 좋아하는 경우.

완전한 테스트를 스크립트와 성능이 결과 을 증명하는 날짜가 실질적으로 보다 빠른 변환을 varchar.

이것을 보십시오:

SELECT CONVERT(VARCHAR(10),GETDATE(),111)

위의 문으로 변환 당신의 현재 형식 YYYY/MM/DD, 를 참조하십시오 이 링크 을 선택하는 것이 바람직 형식입니다.

SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))

사용할 수 있습니다 CONVERT 기능만을 반환 날짜입니다.는 링크를 참조하십시오(s)below:

날짜와 시간을 조작에서 SQL Server2000

던지기 및 변환

에 대한 구문을 사용하여 변환 기능:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 

반환 날짜 형식

캐스트(주문일시)

위 코드에서 작동하는 sql server2010

이 반환됩니다 다음과 같 12/12/2013

에 대한 SQL Server2012 를 사용하여 아래 코드

CONVERT(VARCHAR(10), OrderDate , 111)
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011

를 사용하여 바닥에()-그냥 절단 시간이 부분입니다.

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)

를 사용하는 경우 SQL Server2012 또는 위 버전,

Format() 기능입니다.

이미 여러 개의 답변과 서식 형태에 대한 SQL server.하지만 대부분의 방법은 다소 모호하기 어려울 것에 대한 당신을 기억하는 숫자에 대한 형식으로 입력하거나 기능에 대하여 특정 날짜 형식입니다.그 이유는 다음 버전에서의 SQL 서버가 더 나은 옵션입니다.

FORMAT ( value, format [, culture ] )

문화 옵션은 매우 유용으로 지정할 수 있습으로 날짜별 시청자에게 제공합니다.

당신이 기억해야 d(을 위한 작은 패턴)D(에 대한 긴 패턴).

1."d"-짧은 날짜 패턴이다.

2009-06-15T13:45:30 -> 6/15/2009 (en-US)
2009-06-15T13:45:30 -> 15/06/2009 (fr-FR)
2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)

2."D"-오일 패턴이다.

2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US)
2009-06-15T13:45:30 -> 15 июня 2009 г. (ru-RU)
2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE)

에 더 많은 예제 쿼리가 있습니다.

DECLARE @d DATETIME = '10/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result'; 

SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';

US English Result Great Britain English Result  German Result Simplified Chinese (PRC) Result
----------------  ----------------------------- ------------- -------------------------------------
10/1/2011         01/10/2011                    01.10.2011    2011/10/1

US English Result            Great Britain English Result  German Result                    Chinese (Simplified PRC) Result
---------------------------- ----------------------------- -----------------------------  ---------------------------------------
Saturday, October 01, 2011   01 October 2011               Samstag, 1. Oktober 2011        2011年10月1日

당신이 더 많은 것을 원하는 경우 형식,갈 수 있습니다.:

  1. 표준 날짜 및 시간 형식 문자열
  2. 사용자 지정한 날짜와 시간 형식 문자열

는 경우 사용할 변환과 동일한 출력에서와 같이 원래 질문,즉,yyyy-mm-dd 다음 사용 CONVERT(varchar(10),[SourceDate as dateTime],121) 동일한 코드는 이전 부부는 답변이지만,코드로 변환하는 yyyy-mm-dd 형식으로 대시는 121.

을 얻을 수있다면에 내 항목에 대한 두 번째, 이 종류의 형식에 속하지 않는 데이터베이, 며,그 이유는 그지없이 가능한 어리석은 높은 오버헤드'트릭은'때까지 SQL Server2008 때 실제 부분을 데이터 유형을 소개한다.를 만드는 등의 변환에서 데이터 계층의 오버헤드에 DBMS,하지만 더 중요한 것은 두 번째,당신이 무언가가 다음과 같이,당신은 기본적으로 만들어 메모리에서 분리된 데이터는 나는 가정을 반환하는 프로그램입니다.할 수 없습니다 다시 넣어서 다른 3NF+열 또는 아무것도를 비교 입력한 복귀하지 않고,그래서 당신이 한 일을 도입된 포인트의 실패와 제거한 관계형 참조.

당신은 항상 앞서 반환 날짜/시간 데이터 입력을 호출하는 프로그램 프레젠테이션에서 계층에게 어떤 조정이 필요합니다. 로 변환하는 것으로 반환하기 전에 호출자에게 당신은 모두 제거하는 희망의에서 참조 무결성 프로그램.하지 못하는 업데이트하거나 삭제 작업시오지 않으면 일종의 수동 복귀하는 노출의 데이터 인/드/gremlin 오류가할 때 필요가 없습니다.

SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)

SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE()))

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))

편집:처음 두 가지 방법은 본질적으로 동일하고 수행으로 변환 varchar 방법입니다.

를 구하는 결과 표시,나는 다음 명령을 사용합니다.

SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))

I holpe 그것은 유용합니다.

필요하신 경우에 발생 varchar 데이터를 통해 이동

SELECT CONVERT(DATE, GETDATE()) --2014-03-26
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26

는 이미 앞에서 설명

필요하신 경우에 발생 날짜와 시간 형식으로 가야를 통해 아래의 쿼리

1) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 111)) 로 OnlyDate--2014-03-26 00:00:00.000

2) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 112)) 로 OnlyDate--2014-03-26 00:00:00.000

3)

 DECLARE  @OnlyDate DATETIME
   SET @OnlyDate = DATEDIFF(DD, 0, GETDATE())
   SELECT @OnlyDate AS OnlyDate

--2014-03-26 00:00:00.000

 Convert(nvarchar(10), getdate(), 101) --->  5/12/14

 Convert(nvarchar(12), getdate(), 101) --->  5/12/2014

는 경우에 할당하는 결과를 열 또는 변수에게 그것이 날짜를 입력 및 변환을 암시적입니다.

DECLARE @Date DATE = GETDATE()   

SELECT @Date   --> 2017-05-03

이제 작업에서 당신의 경우:

CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25

괜찮지만,저는 조금 늦게:),여기에서 다른 솔루션입니다.

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)

결과

2008-09-22 00:00:00.000

고 사용하는 경우에는 SQL Server2012 고 더 높은 다음을 사용할 수 있습니다 FORMAT() 기능을 다음과 같이-

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')

도를 사용하여 고대 MSSQL Server7.0,여기에 코드(예의이 링크)허용되는 나에게 무엇이든 얻을 수 있 날짜 형식을 찾고 있었다:

PRINT '1) Date/time in format MON DD YYYY HH:MI AM (OR PM): ' + CONVERT(CHAR(19),GETDATE())  
PRINT '2) Date/time in format MM-DD-YY: ' + CONVERT(CHAR(8),GETDATE(),10)  
PRINT '3) Date/time in format MM-DD-YYYY: ' + CONVERT(CHAR(10),GETDATE(),110) 
PRINT '4) Date/time in format DD MON YYYY: ' + CONVERT(CHAR(11),GETDATE(),106)
PRINT '5) Date/time in format DD MON YY: ' + CONVERT(CHAR(9),GETDATE(),6) 
PRINT '6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): ' + CONVERT(CHAR(24),GETDATE(),113)

그것이 출력:

1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015  1:14PM
2) Date/time in format MM-DD-YY: 02-27-15
3) Date/time in format MM-DD-YYYY: 02-27-2015
4) Date/time in format DD MON YYYY: 27 Feb 2015
5) Date/time in format DD MON YY: 27 Feb 15
6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630
DECLARE @yourdate DATETIME = '11/1/2014 12:25pm'    
SELECT CONVERT(DATE, @yourdate)

날짜:

SELECT CONVERT(date, GETDATE())
SELECT CAST(GETDATE() as date)

시간:

SELECT CONVERT(time , GETDATE() , 114)
SELECT CAST(GETDATE() as time)

나는 은혜 다음에는 언급되지 않았:

DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))

그것은 또한 걱정하지 않는 로컬 또는 수로 변환-하지만,각각의 부분을'아마 않습니다 수학이다.그래서 될 수 있습보다 약간 느리게 날짜 방법,그러나 저에게 그것은 훨씬 더 많은 분명하다.특히고 싶어 그룹에 의해 해와 달이 설정(하루 1)입니다.

에서 시작하는 SQL SERVER,2012 년 당신이 작업을 수행 할 수 있습니다:

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')

SQL Server2000

CAST(
(
    STR( YEAR( GETDATE() ) ) + '/' +
    STR( MONTH( GETDATE() ) ) + '/' +
    STR( DAY( GETDATE() ) )
)
AS DATETIME)

단순히 당신이 할 수 있는 방법:

SELECT CONVERT(date, getdate())
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

출력으로:

2008-09-22 00:00:00.000

또는 단순히 다음과 같다:

SELECT CONVERT (DATE, GETDATE()) 'Date Part Only'

결과:

Date Part Only
--------------
2013-07-14

왜 당신이 사용하 DATE_FORMAT(your_datetiem_column,'%d-%m-%Y')?

EX: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name

을 변경할 수 있습의 순서 m,d,올해에 다시 배치 '%d-%m-%Y' 부품

내가 이것을 알고 있는지 보이지 않는 곳 사람이 명시된 그 이 방법입니다.에서 무엇을 말할 수 있는,이것은 ANSI 표준입니다.

SELECT CAST(CURRENT_TIMESTAMP AS DATE)

그것은 좋은 것입한 경우 Microsoft 수 있도 지원 ANSI 표준 CURRENT_DATE 변수입니다.

이 누락되었에서 모든 대답하지 않을 수 있습니다,가장 효율적이지만 매우 쉽게 작성하고 이해할 수 없는 스타일이 필요없이 복잡한 날짜능합니다.

SELECT CONVERT(DATETIME,CONVERT(DATE,((GETDATE()))))

사용할 수 있습니다 다음 날짜를 위한 부품 및 포맷 날짜:

DATENAME=>문자를 반환하는 나타내는 문자열을 지정한 부분을 지정한 날짜

DATEADD=>의 DATEPART() 기능 사용을 반환하는 단일의 날짜/시간,같은 해,달,날,시,분,etc.

부분=>정수를 반환합니다 나타내는 지정된 부분의 지정된 날짜입니다.

CONVERT() =>의 CONVERT() 기능은 일반적인 기능을 변환하는 표정 하나의 데이터를 입력합니다.이 CONVERT() 기능을 표시하는 데 사용할 수 있습 날짜/시간 다른 형식으로 데이터.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top