[SQL] 어떻게 SQL 서버 날짜 시간 데이터 형식에서 날짜 만 반환
SQL어떻게 SQL 서버 날짜 시간 데이터 형식에서 날짜 만 반환
SELECT GETDATE()
반환 값 : 2008-09-22 15 : 24 : 13.790
2008-09-22 00 : 00 : 00 : 나는 시간 부분없이 날짜 부분을 원하는 00.000
나는 어떻게받을 수 있나요?
해결법
-
==============================
1.SQL Server 2008 및 이상에, 당신은 날짜로 변환해야합니다 :
SQL Server 2008 및 이상에, 당신은 날짜로 변환해야합니다 :
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 DATEADD (DD, DATEDIFF (일, 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
-
==============================
2.2008 SQLSERVER 이제 짧은 시간 구성 요소 만 날짜를 포함하는 '날짜'데이터 유형이 있습니다. 다음과 같은 작업을 수행 할 수 SQLServer에 2008 년 이후를 사용하는 사람은 :
2008 SQLSERVER 이제 짧은 시간 구성 요소 만 날짜를 포함하는 '날짜'데이터 유형이 있습니다. 다음과 같은 작업을 수행 할 수 SQLServer에 2008 년 이후를 사용하는 사람은 :
SELECT CONVERT(date, GETDATE())
-
==============================
3.SQL 2008 이상을 사용하는 경우 :
SQL 2008 이상을 사용하는 경우 :
select cast(getdate() as date)
-
==============================
4.DATEADD 및 DATEDIFF은 VARCHAR로 변환보다는 더 낫다. 두 쿼리는 동일한 실행 계획을 가지고 있지만, 실행 계획은 데이터 액세스 전략에 대해 primarly하고 항상 모든 조각을 수행하는 데 걸리는 CPU 시간과 관련된 암시 적 비용을 공개하지 않습니다. 두 쿼리는 수백만 개의 행이있는 테이블에 대해 실행하는 경우, CPU 시간 참조 DateDiff 가까이 변환 CPU 시간의 1 / 3을 할 수 있습니다 사용!
DATEADD 및 DATEDIFF은 VARCHAR로 변환보다는 더 낫다. 두 쿼리는 동일한 실행 계획을 가지고 있지만, 실행 계획은 데이터 액세스 전략에 대해 primarly하고 항상 모든 조각을 수행하는 데 걸리는 CPU 시간과 관련된 암시 적 비용을 공개하지 않습니다. 두 쿼리는 수백만 개의 행이있는 테이블에 대해 실행하는 경우, CPU 시간 참조 DateDiff 가까이 변환 CPU 시간의 1 / 3을 할 수 있습니다 사용!
쿼리에 대한 실행 계획을 보려면 :
set showplan_text on GO
DATEADD 및 DATEDIFF 둘 다 CONVERT_IMPLICIT를 실행합니다.
변환하지 솔루션은 일부에 대한 간단하고 쉽게 읽을 수 있지만, 그것은 느립니다. 날짜에 캐스트 백업 할 필요 (이 암시 적 서버에서 수행)은 없다. 정수 결과는 날짜에 암시 적으로 변환 돌아올 것이다으로 이후 DateAdd 함수에 대한 참조 DateDiff 방법에 진짜 필요가있다.
DatesTable FROM SELECT CONVERT (VARCHAR, MyDate가, 101)
|--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101))) |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))
DatesTable FROM SELECT DATEADD (DD, 0, DATEDIFF (DD, 0, MyDate가))
|--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 성능을 가지고 있지만 떠있는 날짜 데이터 형식 캐스팅으로 권장되지 않으며.
사람을 기억 : 사람을 생각하지 마십시오. 성능 통계 봐, 그리고 그것을 자신을 테스트!
당신이 당신의 결과를 테스트 할 때주의해야합니다. 클라이언트에 많은 행을 선택하면 그것이 계산을 수행하는 것보다 네트워크를 통해 행을 전송하는 데 시간이 더 걸리는 성능 차이 becauses을 숨 깁니다. 그래서 모든 행에 대한 작업이 서버에서 수행하지만 클라이언트로 전송에는 행 집합이없는되어 있는지 확인하십시오.
캐시 최적화 쿼리에 영향을주는 경우에 대한 일부 사람들에 대한 혼란이있는 것 같습니다. 같은 일괄 또는 개별 일괄 적으로 두 개의 쿼리를 실행하면 캐싱에 영향을주지 않습니다. 당신도 캐시를 만료 될 수 있도록 수동 또는 단순히 앞뒤로 쿼리를 여러 번 실행합니다. 쿼리 # 2에 대한 모든 최적화는 또한 당신의 경우처럼 실행 # 1을 던져, 후속 쿼리에 영향을 미칠 것입니다.
여기에 참조 DateDiff는 VARCHAR로 변환하는 것보다 실질적으로 더 빨리 증명 전체 테스트 스크립트 및 성능 결과입니다.
-
==============================
5.이 시도:
이 시도:
SELECT CONVERT(VARCHAR(10),GETDATE(),111)
위의 문은 YYYY / MM / DD로 현재 형식을 변환하여 바람직 형식을 선택하려면이 링크를 참조하시기 바랍니다.
-
==============================
6.
SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))
-
==============================
7.당신은 날짜를 반환하는 CONVERT 기능을 사용할 수 있습니다. 아래 링크 (들)를 참조하십시오 :
당신은 날짜를 반환하는 CONVERT 기능을 사용할 수 있습니다. 아래 링크 (들)를 참조하십시오 :
SQL Server 2000에서 날짜 및 시간 조작
CAST 및 CONVERT
변환 기능을 사용하는 구문은 다음과 같습니다
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
-
==============================
8.날짜 형식으로 반환
날짜 형식으로 반환
위의 코드는 SQL 서버 2010에서 작동합니다
그것은 2 시까처럼 돌아갑니다
SQL 서버 2012를 사용하여 아래의 코드를
CONVERT(VARCHAR(10), OrderDate , 111)
-
==============================
9.당신은 VARCHAR로 결과를해야하는 경우 통과한다
당신은 VARCHAR로 결과를해야하는 경우 통과한다
SELECT CONVERT(DATE, GETDATE()) --2014-03-26 SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26
이는 이미 상기 언급된다.
당신이 날짜 및 시간 형식을 초래할 필요가있는 경우, 아래의 쿼리 중 하나를 사용해야합니다
-
==============================
10.
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
-
==============================
11.단지 컷 시간 부분 - FLOOR ()를 사용.
단지 컷 시간 부분 - FLOOR ()를 사용.
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
-
==============================
12.형식 () 함수를 사용합니다.
형식 () 함수를 사용합니다.
복수 응답 및 SQL 서버에 대한 서식 유형이 이미 있습니다. 그러나 방법의 대부분은 다소 모호하고 특정 날짜 형식에 대한 형식 유형 또는 함수의 번호를 기억하기가 어렵다. SQL 서버의 다음 버전에서 더 나은 옵션이 있습니다 이유입니다.
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日
당신이 더 많은 포맷을하려는 경우, 당신은 갈 수 있습니다 :
-
==============================
13.당신은 CONVERT를 사용하고, YYYY-MM-DD 다음 (), [SourceDate 날짜 _ 시간으로, (121) VARCHAR (10)와 같은 코드는 이전 몇 가지 답변을 CONVERT를 사용하는 것입니다 원래의 질문 제기,에서와 동일한 결과를 얻으려면 하지만 대시 YYYY-MM-DD로 변환하는 코드 (121)이다.
당신은 CONVERT를 사용하고, YYYY-MM-DD 다음 (), [SourceDate 날짜 _ 시간으로, (121) VARCHAR (10)와 같은 코드는 이전 몇 가지 답변을 CONVERT를 사용하는 것입니다 원래의 질문 제기,에서와 동일한 결과를 얻으려면 하지만 대시 YYYY-MM-DD로 변환하는 코드 (121)이다.
나는 두 번째 내 가두 연설에 얻을 수있는 경우, 포맷 이런 종류의 데이터 계층에 속하지 않는, 그것은 SQL 서버까지 바보 높은 오버 헤드 '트릭'없이 불가능 이유의 그 실제 날짜 부분 데이터 유형은 2008 소개했다. 데이터 계층에서 이러한 변환을 만드는 것은 당신의 DBMS에 오버 헤드의 엄청난 낭비이지만, 더 중요한 것은, 당신은 같은 것을 할 두 번째는, 당신은 기본적으로 당신이 다음 프로그램으로 돌아갑니다 가정 점에서 메모리 고아 데이터를 만들었습니다. 그래서 모든 당신이 장애 지점을 도입 관계형 참조를 제거 했어, 당신은 다른 3NF + 칼럼에 다시 넣을 수 없습니다 아니면 복귀하지 않고 입력 무엇에 비교할 수 있습니다.
당신은 항상 가서 프리젠 테이션 계층, 조정이 필요 어떤 메이크업 호출 프로그램과에서 날짜 데이터 형식을 반환해야합니다. 즉시 발신자에게 반환하기 전에 일을 변환 가서, 당신은 응용 프로그램에서 참조 무결성의 모든 희망을 제거한다. 당신이 필요가없는 경우 다시 인간 / 코드 / 놈아 오류로 데이터를 노출되고 수동 복귀, 어떤 종류의 작업을 수행하지 않는 한 이것은 다시, 갱신 또는 삭제 조작을 방지합니다.
-
==============================
14.
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 방법으로 변환을 수행합니다.
-
==============================
15.표시된 결과를 얻으려면, 나는 다음과 같은 명령을 사용합니다.
표시된 결과를 얻으려면, 나는 다음과 같은 명령을 사용합니다.
SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))
나는 그것이 유용 바랍니다.
-
==============================
16.
Convert(nvarchar(10), getdate(), 101) ---> 5/12/14 Convert(nvarchar(12), getdate(), 101) ---> 5/12/2014
-
==============================
17.당신이 열 또는 변수에 결과를 할당하는 경우, 그것에게 DATE 유형을 제공하고, 변환은 암시 적이다.
당신이 열 또는 변수에 결과를 할당하는 경우, 그것에게 DATE 유형을 제공하고, 변환은 암시 적이다.
DECLARE @Date DATE = GETDATE() SELECT @Date --> 2017-05-03
-
==============================
18.나는이 사건에서 일 것이라고 생각 :
나는이 사건에서 일 것이라고 생각 :
CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate //here date is obtained as 1990/09/25
-
==============================
19.
DECLARE @yourdate DATETIME = '11/1/2014 12:25pm' SELECT CONVERT(DATE, @yourdate)
-
==============================
20.내가 늦게 비트 해요하지만 좋아, :), 여기에 다른 솔루션입니다.
내가 늦게 비트 해요하지만 좋아, :), 여기에 다른 솔루션입니다.
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)
결과
2008-09-22 00:00:00.000
당신은 SQL 서버 2012을 사용하는 경우 높은 당신은 다음과 같이 FORMAT () 함수를 사용할 수 있습니다 -
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')
-
==============================
21.심지어 고대 MSSQL Server 7.0을 사용하여, 여기에 코드 (이 링크의 의례) 제가 당시를 찾고 있었다 어떤 날짜 형식 득점 :
심지어 고대 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
-
==============================
22.데이트:
데이트:
SELECT CONVERT(date, GETDATE()) SELECT CAST(GETDATE() as date)
시각:
SELECT CONVERT(time , GETDATE() , 114) SELECT CAST(GETDATE() as time)
-
==============================
23.간단하게이 방법을 수행 할 수 있습니다
간단하게이 방법을 수행 할 수 있습니다
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
-
==============================
24.왜 ( '% D- % M- % Y', your_datetiem_column) DATE_FORMAT를 사용하지 않는?
왜 ( '% D- % M- % Y', your_datetiem_column) DATE_FORMAT를 사용하지 않는?
EX : 선택 DATE_FORMAT (some_datetime_column '% D- % M- % Y')에서 TABLE_NAME
는 재정렬 '% D- % M- % Y'부분으로 m, D 및 연도 순서를 변경할 수있다
-
==============================
25.나는 이것이 오래 알고 있지만, 사람이 이런 식으로 언급 어디서 볼 수 없습니다. 내가 말할 수있는 건,이 ANSI 표준입니다.
나는 이것이 오래 알고 있지만, 사람이 이런 식으로 언급 어디서 볼 수 없습니다. 내가 말할 수있는 건,이 ANSI 표준입니다.
SELECT CAST(CURRENT_TIMESTAMP AS DATE)
마이크로 소프트는 또한 ANSI 표준 CURRENT_DATE 변수를 지원할 수 있다면 그것은 좋은 것입니다.
-
==============================
26.내가 언급하지 않은 다음을 선호 :
내가 언급하지 않은 다음을 선호 :
DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))
또한 지역에 관심 또는 이중 변환하지 않습니다 - 각 '날짜 부분은'아마 수학을하지 않는다. 그래서 조금 느린 DATEDIFF 방법보다 수 있지만 내게는 훨씬 더 분명하다. 난 그냥 년 월별로 그룹화 할 특히 (1 일 설정).
-
==============================
27.SQL 서버 2012 년부터 시작, 당신은이 작업을 수행 할 수 있습니다 :
SQL 서버 2012 년부터 시작, 당신은이 작업을 수행 할 수 있습니다 :
SELECT FORMAT (GETDATE () "YYYY-MM-DD 00 : 00 : 00.000 ')
-
==============================
28.SQL 서버 2000
SQL 서버 2000
CAST( ( STR( YEAR( GETDATE() ) ) + '/' + STR( MONTH( GETDATE() ) ) + '/' + STR( DAY( GETDATE() ) ) ) AS DATETIME)
-
==============================
29.당신은 날짜 부분에 대해 다음과 날짜 포맷을 사용할 수 있습니다 :
당신은 날짜 부분에 대해 다음과 날짜 포맷을 사용할 수 있습니다 :
DATENAME은 => 지정된 날짜의 지정된 datepart를 나타내는 문자열을 반환
DATEADD는 =>를 DATEPART () 함수 등의 년, 월, 일,시, 분 등의 일자 / 시간의 단일 부분을 반환하는 데 사용
DATEPART는 => 지정된 날짜의 지정된 datepart를 나타내는 정수를 반환합니다.
CONVERT () => 변환 () 함수는 일반 함수이고 그 변환 한 다른 데이터 형식의 표현. 그만큼 CONVERT () 함수는 서로 다른 형식의 날짜 / 시간 데이터를 표시하는 데 사용될 수있다.
-
==============================
30.날짜 (날짜 및 시간 필드) 및 DATE_FORMAT (날짜 및 시간, '% Y- % M- % D') 날짜와 시간에서 모두 수익률은 날짜
날짜 (날짜 및 시간 필드) 및 DATE_FORMAT (날짜 및 시간, '% Y- % M- % D') 날짜와 시간에서 모두 수익률은 날짜
from https://stackoverflow.com/questions/113045/how-to-return-only-the-date-from-a-sql-server-datetime-datatype by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL 문에 사용자가 제공 한 입력을 추가 할 수 있습니까? (0) | 2020.03.07 |
---|---|
[SQL] 어떻게 SQL Server의 단일 견적을 탈출합니까? (0) | 2020.03.07 |
[SQL] 그룹화 SQL 결과 각 그룹에 대해 최대 값을 기록 받기 (0) | 2020.03.07 |
[SQL] 선택 *를 사용하지 않는 이유는 무엇입니까? (0) | 2020.03.07 |
[SQL] PostgreSQL의 열 이름은 대소 문자를 구분? (0) | 2020.03.07 |