SELECT GETDATE()
반환: 2008-09-22 15:24:13.790
시간 부분이 없는 날짜 부분을 원합니다: 2008-09-22 00:00:00.000
어떻게 얻을 수 있습니까?
질문자 :eddiegroves
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
에 대해 생각할 필요가 없습니다.마이클이 제안한 대로
다음 변형 사용: SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
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
SQLServer 2008에는 이제 시간 구성 요소 없이 날짜만 포함하는 '날짜' 데이터 형식이 있습니다. SQLServer 2008 이상을 사용하는 사람은 누구나 다음을 수행할 수 있습니다.
SELECT CONVERT(date, GETDATE())
SQL 2008 이상을 사용하는 경우:
select cast(getdate() as date)
DATEADD 및 DATEDIFF가 varchar로 변환하는 것보다 낫습니다. 두 쿼리 모두 동일한 실행 계획을 가지고 있지만 실행 계획은 주로 데이터 액세스 전략에 관한 것이며 모든 작업을 수행하는 데 걸리는 CPU 시간과 관련된 암시적 비용을 항상 나타내지는 않습니다. 두 쿼리가 모두 수백만 개의 행이 있는 테이블에 대해 실행되는 경우 DateDiff를 사용하는 CPU 시간은 CPU 변환 시간의 1/3에 가까울 수 있습니다!
쿼리 실행 계획을 보려면:
set showplan_text on GO
DATEADD와 DATEDIFF는 모두 CONVERT_IMPLICIT를 실행합니다.
변환하지 솔루션은 일부에 대한 간단하고 쉽게 읽을 수 있지만, 그것은 느립니다. datetime으로 다시 캐스트할 필요가 없습니다(이는 서버에서 암시적으로 수행됨). 정수 결과도 암시적으로 다시 datetime으로 변환되므로 나중에 DateAdd에 대한 DateDiff 메서드가 실제로 필요하지 않습니다.
SELECT CONVERT(varchar, MyDate, 101) FROM DatesTable
|--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]))
@digi가 제안한 대로 FLOOR()를 사용하면 성능이 DateDiff에 더 가깝지만 datetime 데이터 유형을 부동 및 역으로 캐스팅하면 항상 원래 값이 생성되지 않으므로 권장하지 않습니다.
기억하십시오. 아무도 믿지 마십시오. 성능 통계를보고 직접 테스트하십시오!
결과를 테스트할 때 주의하십시오. 클라이언트에 많은 행을 선택하면 계산을 수행하는 것보다 네트워크를 통해 행을 보내는 데 더 오래 걸리기 때문에 성능 차이가 숨겨집니다. 따라서 모든 행에 대한 작업이 서버에서 수행되지만 클라이언트로 전송된 행 집합이 없는지 확인하십시오.
캐시 최적화가 쿼리에 영향을 미치는 시기에 대해 일부 사람들에게 혼란이 있는 것 같습니다. 동일한 일괄 처리 또는 별도의 일괄 처리에서 두 개의 쿼리를 실행해도 캐싱에 영향을 주지 않습니다. 따라서 캐시를 수동으로 만료시키거나 단순히 쿼리를 여러 번 앞뒤로 실행할 수 있습니다. 쿼리 #2에 대한 최적화는 모든 후속 쿼리에도 영향을 미치므로 원하는 경우 실행 #1을 버리십시오.
다음은 DateDiff가 varchar로 변환하는 것보다 훨씬 빠르다는 것을 증명하는 전체 테스트 스크립트 및 성능 결과입니다.
이 시도:
SELECT CONVERT(VARCHAR(10),GETDATE(),111)
위의 명령문은 현재 형식을 YYYY/MM/DD
로 변환합니다. 이 링크 를 참조하여 선호하는 형식을 선택하십시오.
SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))
날짜 형식으로 반환
CAST(OrderDate AS 날짜)
위의 코드는 SQL Server 2010에서 작동합니다.
2013년 12월 12일처럼 돌아올 것입니다.
SQL Server 2012의 경우 아래 코드를 사용하십시오.
CONVERT(VARCHAR(10), OrderDate , 111)
CONVERT
함수를 사용하여 날짜만 반환할 수 있습니다. 아래 링크를 참조하십시오.
변환 함수를 사용하는 구문은 다음과 같습니다.
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
varchar
로 필요한 경우 다음을 수행해야 합니다.
SELECT CONVERT(DATE, GETDATE()) --2014-03-26 SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26
이미 위에서 언급한 것입니다.
날짜 및 시간 형식의 결과가 필요한 경우 아래 쿼리 중 하나를 사용해야 합니다.
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 111)) AS OnlyDate
2014-03-26 00:00:00.000
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 112)) AS 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
Format()
함수를 사용합니다.
SQL Server에는 이미 여러 답변 및 형식 지정 유형이 있습니다. 그러나 대부분의 방법은 다소 모호하고 특정 날짜 형식과 관련하여 형식 유형 또는 기능에 대한 숫자를 기억하기 어려울 것입니다. 그렇기 때문에 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日
더 많은 형식을 원하면 다음으로 이동할 수 있습니다.
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
FLOOR() 사용 - 시간 부분만 잘라냅니다.
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
CONVERT를 사용하고 원래 질문과 동일한 출력을 얻으려면 yyyy-mm-dd를 사용하고 이전 몇 가지 답변과 동일한 코드를 CONVERT(varchar(10),[SourceDate as dateTime],121)
, 그러나 대시를 사용하여 yyyy-mm-dd로 변환하는 코드는 121입니다.
잠시만 내 솝박스에 들어갈 수 있다면 이런 종류의 서식은 데이터 계층에 속하지 않으므로 실제 datepart 데이터 형식이 도입. 데이터 계층에서 이러한 변환을 수행하는 것은 DBMS에서 막대한 오버헤드를 낭비하지만 더 중요한 것은 이와 같은 작업을 두 번째로 수행하면 기본적으로 메모리 내 고아 데이터가 생성되어 프로그램으로 돌아갈 것이라고 가정한다는 것입니다. 다른 3NF+ 열에 다시 넣거나 되돌리지 않고 입력한 것과 비교할 수 없으므로 실패 지점을 도입하고 관계형 참조를 제거하기만 하면 됩니다.
항상 계속 진행하여 dateTime 데이터 유형을 호출 프로그램으로 반환 하고 PRESENTATION 계층에서 필요한 조정을 수행해야 합니다. 호출자에게 반환하기 전에 변환하는 즉시 응용 프로그램에서 참조 무결성에 대한 모든 희망을 제거하는 것입니다. 이것은 필요하지 않을 때 데이터를 휴먼/코드/gremlin 오류에 다시 노출시키는 일종의 수동 복귀를 수행하지 않는 한 UPDATE 또는 DELETE 작업을 다시 방지합니다.
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()))
나는 그것이 유용하기를 바랍니다.
Convert(nvarchar(10), getdate(), 101) ---> 5/12/14 Convert(nvarchar(12), getdate(), 101) ---> 5/12/2014
결과를 열이나 변수에 할당하는 경우 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
DECLARE @yourdate DATETIME = '11/1/2014 12:25pm' SELECT CONVERT(DATE, @yourdate)
좋아, 비록 내가 조금 늦었지만 :), 여기에 또 다른 해결책이 있습니다.
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')
날짜:
SELECT CONVERT(날짜, GETDATE()) SELECT CAST(GETDATE()를 날짜로)
시간:
SELECT CONVERT(시간, GETDATE(), 114) SELECT CAST(시간으로 GETDATE())
그냥 해:
SELECT CAST(date_variable AS date)
또는 PostgreSQL 사용:
SELECT date_variable::date
고대 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
간단히 다음과 같이 할 수 있습니다.
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' ) 을(를) 사용하지 않는 이유는 무엇입니까?
예: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name
'%d-%m-%Y'
부분을 재배열하여 m,d 및 연도의 순서를 변경할 수 있습니다.
나는 이것이 오래되었다는 것을 알고 있지만 누가 이런 식으로 말한 곳을 보지 못합니다. 내가 말할 수있는 것은 이것이 ANSI 표준입니다.
SELECT CAST(CURRENT_TIMESTAMP AS DATE)
Microsoft가 ANSI 표준 CURRENT_DATE 변수도 지원할 수 있다면 좋을 것입니다.
나는 언급되지 않은 다음을 선호합니다.
DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))
또한 각 'datepart'가 수학을 수행하지만 로컬 또는 이중 변환을 수행하지 않습니다. 따라서 datediff 방법보다 약간 느릴 수 있지만 나에게는 훨씬 더 명확합니다. 특히 연도와 월별로 그룹화하려는 경우(일을 1로 설정).
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)
출처 : http:www.stackoverflow.com/questions/113045/how-to-return-only-the-date-from-a-sql-server-datetime-datatype
템플릿이 헤더 파일에서만 구현될 수 있는 이유는 무엇입니까? (0) | 2021.12.06 |
---|---|
파일을 한 줄씩 목록으로 읽는 방법은 무엇입니까? (0) | 2021.12.06 |
Vim은 마지막 검색 강조 표시를 지웁니다. (0) | 2021.12.04 |
JavaScript에서 문자열을 정수로 변환하는 방법은 무엇입니까? (0) | 2021.12.04 |
Bash에서 명령의 출력에 변수를 어떻게 설정합니까? (0) | 2021.12.04 |