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
장점 :
varchar
-datetime
전환 필요locale
datetime
데이터 유형에는 가질 수 없습니다.전혀 시간이 없다.. 데이터 저장과 사용자 프리젠 테이션이 혼란 스럽다고 생각합니다. 원하는 모든 것이 사용자에게 시간 부분이없는 문자열 (0이 아닌 공백)을 표시하는 방법이면 원하는 경우Convert(varchar(30), @Date, 101)
또는 비슷한 것. 만나다SQL Server 온라인 설명서 • 변환 및 변환더 많은 정보를 위해서. - ErikECAST(... AS DATE)
또는CONVERT(DATE, ...)
이것은이 페이지에서 자주 언급되었습니다. - MagnusSELECT DATEADD(dd, DATEDIFF(dd, 0, @your_date), 0)
그때 때문에dd
다른 어떤 것을 위해 스왑 아웃 될 수있다.datepart
키워드를 자르려면datetime
임의의 수준에서. - Michael
SQLServer2008에는 이제 시간 구성 요소가없는 날짜 만 포함하는 '날짜'데이터 형식이 있습니다. SQLServer 2008 이상을 사용하는 모든 사용자는 다음을 수행 할 수 있습니다.
SELECT CONVERT(date, GETDATE())
SQL 2008 이상을 사용하는 경우
select cast(getdate() as date)
DateTime2
대신 잘 작동합니다.sqlfiddle.com/#!6/9eecb7/2833 - abatishchev2015-10-01
때문에DateTime
제한 사항. 캐스트하지 않고 사용해보기Date
, 그것은 산출한다2015-10-01
너무!declare @date1 datetime = '2015-09-30 23:59:59.999';select @date1
= & gt;2015-10-01
- Frédéric
DATEADD 및 DATEDIFF는 CONVERTing to varchar보다 좋습니다. 두 쿼리 모두 동일한 실행 계획을 갖고 있지만 실행 계획은 주로데이터전략에 액세스하고 모든 부분을 수행하는 데 소요 된 CPU 시간과 관련된 암시 적 비용을 항상 드러내지는 않습니다. 두 쿼리가 수백만 행이있는 테이블에 대해 실행되는 경우 DateDiff를 사용하는 CPU 시간은 Convert CPU 시간의 1/3에 가까워 질 수 있습니다!
쿼리 실행 계획을 확인하려면 다음을 수행하십시오.
set showplan_text on
GO
DATEADD 및 DATEDIFF는 모두 CONVERT_IMPLICIT를 실행합니다.
CONVERT 솔루션은 일부 경우 더 간단하고 쉽게 읽을 수 있지만~이다.느린. datetime으로 다시 캐스트 할 필요가 없습니다 (이것은 서버에서 암시 적으로 수행됩니다). 정수 결과가 암시 적으로 다시 datetime으로 변환되기 때문에 DateAdd의 DateDiff 메소드에도 실제 필요가 없습니다.
SELECT CONVERT (varchar, MyDate, 101) FROM DATETable
|--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))
|--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))
SELECT DATEADD (dd, 0, DATEDIFF (dd, 0, MyDate)) FROM 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]))
FLOOR ()를 @digi로 사용하면 DateDiff에 가까운 성능을 보일 수 있지만 datetime 데이터 유형을 float로 캐스팅하고 항상 원래 값을 반환하지는 않는 것이 좋습니다.
친구들을 기억하십시오 : 아무도 믿지 마십시오. 성능 통계를보고 직접 테스트 해보십시오!
결과를 테스트 할 때는주의하십시오. 클라이언트에 많은 행을 선택하면 계산을 수행하는 것보다 네트워크를 통해 행을 보내는 데 시간이 오래 걸리기 때문에 성능 차이가 숨겨집니다. 따라서 모든 행에 대한 작업이 서버에 의해 수행되지만 클라이언트에 전송 된 행 집합이 없는지 확인하십시오.
캐시 최적화가 쿼리에 영향을 미치는 경우에 대한 혼란이있는 것 같습니다. 동일한 일괄 처리 또는 별도의 일괄 처리에서 두 개의 쿼리를 실행해도 캐싱에 아무런 영향을 미치지 않습니다. 따라서 수동으로 캐시를 만료 시키거나 쿼리를 앞뒤로 여러 번 실행할 수 있습니다. 질의 # 2에 대한 최적화는 이후의 질의에도 영향을 미치므로 원하는 경우 실행 # 1을 버리십시오.
여기있다.전체 테스트 스크립트 및 성능 결과DateDiff가 varchar로 변환하는 것보다 훨씬 빠릅니다.
SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))
이 시도:
SELECT CONVERT(VARCHAR(10),GETDATE(),111)
위의 명령문은 현재 형식을YYYY/MM/DD
, 참조하십시오이 링크원하는 형식을 선택하십시오.
mm/dd/yyyy
체재. - Flea
당신은CONVERT
함수는 날짜 만 반환합니다. 아래 링크를 참조하십시오 :
convert 함수를 사용하는 구문은 다음과 같습니다.
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
날짜 형식으로 반환
CAST (주문일 AS 주문일)
위의 코드는 SQL Server 2010에서 작동합니다.
2012 년 12 월 12 일처럼 돌아갑니다.
SQL Server 2012의 경우 아래 코드를 사용하십시오.
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
CONVERT를 사용하고 원본 질문과 동일한 결과를 얻으려면 yyyy-mm-dd를 사용하십시오.CONVERT(varchar(10),[SourceDate as dateTime],121)
앞의 두 개와 동일한 코드가 대답하지만 대시가있는 yyyy-mm-dd로 변환하는 코드는 121입니다.
내가 잠깐 동안 내 비누 상자에 올 수 있다면,이러한 종류의 서식은 데이터 계층에 속하지 않습니다.따라서 실제 datepart 데이터 형식이 도입 될 때 SQL Server 2008까지 바보 같은 높은 오버 헤드 '트릭'이 없으면 불가능했습니다. 데이터 계층에서 이러한 변환을 수행하는 것은 DBMS의 오버 헤드를 낭비하는 것입니다.하지만 더 중요한 것은 두 번째로 이와 같은 작업을 수행하면 기본적으로 메모리에 고아가 된 데이터가 생성되어 프로그램으로 돌아갈 것이라고 가정합니다. 다른 3NF + 열로 되돌릴 수 없으며 되돌릴 필요없이 입력 한 것과 비교할 수 없기 때문에 오류 지점이 도입되고 관계형 참조가 제거됩니다.
당신은 항상 호출 프로그램에 dateTime 데이터 형식을 반환해야하며프리젠 테이션 단계에서 필요한 조정을하십시오.호출자에게 반환하기 전에 내용을 변환하는 즉시 응용 프로그램에서 참조 무결성의 모든 희망을 제거합니다. 이렇게하면 수동 복귀를 수행하지 않는 한 UPDATE 또는 DELETE 조작을 다시 방지 할 수 있습니다. 수동 복귀는 필요가 없을 때 다시 human / code / gremlin 오류에 노출됩니다.
WHERE col >= @Date AND col < DATEADD(DAY, 1, @Date);
- 칼럼에서 시간을 제거 할 이유가 절대적으로 없습니다. - Aaron Bertrand@Date
제로 시간 부분을 갖는다. 사실이 아니라면 서버 측 시간을 자르는 방법을 알아야합니다. 이 답변은 프리젠 테이션 레이어에 형식을 유지해야한다는 데 동의하지만 프런트 엔드에 대한 서식을 남겨두면 빠른 방법으로자를 필요가 없음을 의미하는 것에 동의하지 않았습니다. - Andrew Lazarus
SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)
SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE()))
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))
편집 : 처음 두 메서드는 본질적으로 동일하고 out varchar 메서드로 변환을 수행하십시오.
select dateadd(dd, datediff(dd, 0, getdate()), 0)
왜냐하면dd
s는 다음 중 하나에 대해 스왑 아웃 될 수 있습니다.그만큼datepart
키워드선택한 모든 세그먼트에서 날짜를 자르십시오. (또한 유의하십시오.dd
에 대한 약어 일 뿐이다.day
.) - Michael
표시된 결과를 얻으려면 다음 명령을 사용합니다.
SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))
나는 유용하다.
용도Format()
기능.
SQL 서버에는 이미 여러 가지 답변과 서식 유형이 있습니다. 그러나 대부분의 방법은 다소 모호하며 특정 날짜 형식과 관련하여 형식 유형이나 함수의 숫자를 기억하기가 어려울 수 있습니다. 그래서 다음 버전의 SQL Server에는 더 나은 옵션이 있습니다.
FORMAT ( value, format [, culture ] )
문화 옵션은 시청자별로 날짜를 지정할 수 있으므로 매우 유용합니다.
d (작은 패턴의 경우)와 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)
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日
형식을 더 원하면 다음으로 가십시오.
Convert(nvarchar(10), getdate(), 101) ---> 5/12/14
Convert(nvarchar(12), getdate(), 101) ---> 5/12/2014
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
삼)
DECLARE @OnlyDate DATETIME
SET @OnlyDate = DATEDIFF(DD, 0, GETDATE())
SELECT @OnlyDate AS OnlyDate
--2014-03-26 00 : 00 : 00.000
열 또는 변수에 결과를 지정하는 경우 DATE 유형을 지정하면 변환이 내재적입니다.
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 Server 2012 이상을 사용하고 있다면FORMAT()
이런 기능 -
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')
고대의 MSSQL Server 7.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
나는 언급되지 않은 다음을 선호한다.
DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))
또한 각 지역의 'datepart'는 아마 수학을하지만 로컬에 대해서는 신경 쓰지 않고 이중 변환을 수행합니다. 그래서 그것은 데이트 티프 방법보다 조금 느릴지도 모르지만 나에게는 훨씬 더 분명합니다. 특히 연중 무휴로 그룹화하고자 할 때 (하루를 1로 설정).
날짜:
SELECT CONVERT(date, GETDATE()) SELECT CAST(GETDATE() as date)
시각:
SELECT CONVERT(time , GETDATE() , 114) SELECT CAST(GETDATE() as time)
SQL Server 2012부터는 다음과 같이 할 수 있습니다.
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')
SQL Server 2000에서
CAST(
(
STR( YEAR( GETDATE() ) ) + '/' +
STR( MONTH( GETDATE() ) ) + '/' +
STR( DAY( GETDATE() ) )
)
AS DATETIME)
왜 DATE_FORMAT (your_datetiem_column, '% d- % m- % Y')를 사용하지 않으시겠습니까?
전의:select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name
다시 배열함으로써 m, d, year의 순서를 바꿀 수 있습니다.'%d-%m-%Y'
부품
이것은 모든 답변에서 빠졌으며, 가장 효율적이지만 작성하기 쉽고, 스타일이 필요하지 않으며, 복잡한 날짜 기능도 없습니다.
SELECT CONVERT(DATETIME,CONVERT(DATE,((GETDATE()))))
간단히 다음과 같이 할 수 있습니다.
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
날짜 부분과 날짜 형식에 대해 다음을 사용할 수 있습니다.
DATENAME => 지정된 날짜의 지정된 datepart를 나타내는 문자열을 리턴합니다.
DATEADD =>DATEPART()
함수는 년, 월, 일,시, 분 등과 같이 날짜 / 시간의 단일 부분을 반환하는 데 사용됩니다.
DATEPART => 지정된 날짜의 지정된 datepart를 나타내는 정수를 리턴합니다.
CONVERT()
=>CONVERT()
함수는 한 데이터 형식의 표현식을 다른 데이터 형식으로 변환하는 일반 함수입니다.
그만큼CONVERT()
함수는 다른 형식으로 날짜 / 시간 데이터를 표시하는 데 사용할 수 있습니다.
날짜 (날짜 및 시간 필드)과DATE_FORMAT (날짜 및 시간, '% Y- % m- % d')둘 다 돌아온다.유일한 날짜날짜 및 시간