itsource

TSQL datetime 필드에서 YYY-MM-DD 형식의 날짜를 가져오려면 어떻게 해야 합니까?

mycopycode 2023. 4. 7. 21:17
반응형

TSQL datetime 필드에서 YYY-MM-DD 형식의 날짜를 가져오려면 어떻게 해야 합니까?

해야 하나요?YYYY-MM-DD? SQL 이상에서합니다.SQL Server 2000을 사용합니다.SQL Server sql sql sql sql sql sql sql sql sql sql sql sql sql sql sql sql sql sql sql sql sql sql?아니면 결과 세트를 취득한 후에 프로그래밍 방식으로 변환하는 것이 더 쉬울까요?

Microsoft Technet에서 CAST 및 CONVERT를 읽었는데 원하는 형식이 나열되지 않아 날짜 형식을 변경할 수 없습니다.

SELECT CONVERT(char(10), GetDate(),126)

당신이 원하지 않는 시간 부분의 바르샤르 찹의 크기를 제한합니다.

SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM

SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy – 10/02/2008                  

SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02           

SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy

SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy

SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy

SELECT convert(varchar, getdate(), 106) -- dd mon yyyy

SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy

SELECT convert(varchar, getdate(), 108) -- hh:mm:ss

SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)

SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy

SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd

SELECT convert(varchar, getdate(), 112) -- yyyymmdd

SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm

SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm

SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm

SQL Server 2012 이후 (원래 질문은 2000년) :

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

원하는 양식은 온라인 책자에 나와 있습니다.

http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx

예를 들어, 다음을 시도해 보십시오.

select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)

convert형식 지정자 120을 가진 함수는 "yyy-MM-d HH:mm:ss" 형식을 제공하므로 날짜 부분만 가져오려면 길이를 10으로 제한해야 합니다.

convert(varchar(10), theDate, 120)

그러나 일반적으로 날짜 형식은 데이터베이스나 비즈니스 계층이 아닌 프레젠테이션 계층에서 수행하는 것이 좋습니다.데이터베이스에서 포맷된 날짜를 반환할 경우 클라이언트 코드는 해당 날짜를 계산해야 하는 경우 해당 날짜를 다시 해석해야 합니다.

C#의 예:

theDate.ToString("yyyy-MM-dd")

YYYYMMDD의 경우 시험해 보십시오.

select convert(varchar,getDate(),112)

SQL Server 2008에서만 테스트했습니다.

위의 답변에서 가장 간단한 방법이 무시되거나 생략된 이유를 알 수 없습니다.

SELECT FORMAT(GetDate(),'yyyy-MM-dd');--= 2020-01-02

SELECT FORMAT(GetDate(),'dd MMM yyyy HH:mm:ss');-- = 02 Jan 2020 08:08:08

나는 두 번째 언어를 선호해. 왜냐하면 네가 어떤 언어를 사용하든, 너는 그것이 무슨 날짜인지 이해할 수 있을 거야!

또한 SQL Server는 컴퓨터에 설정되어 있는 지역 포맷에 관계없이 저장 프로시저로 전송할 때 항상 이를 '이해'합니다.저는 프로그래밍에서 항상 풀이어(yyy), 월명(MM), 24시간 형식(대문자 HH)을 사용합니다.

다른 방법으로는...

CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime)) 

(저도) 타임 파트를 원하신다면 다음 스니펫이 도움이 될 수 있습니다.

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
                              --example -- 2008-10-02T10:52:47.513
replace(convert(varchar, getdate(), 111), '/','-')

"무엇을 잘라내지 않고" 묘기를 부립니다.

누군가 다른 방법으로 하고 싶어하다가 이걸 발견했을 때를 대비해서요

select convert(datetime, '12.09.2014', 104)

독일어 날짜 형식의 문자열을 날짜 개체로 변환합니다.

왜 104죠?여기를 참조해 주세요.http://msdn.microsoft.com/en-us/library/ms187928.aspx

캐스트 및 변환 링크에서는 다음과 같이 스타일 126을 사용합니다.

CONVERT (varchar(10), DTvalue, 126)

그러면 시간이 단축됩니다.yyy-mm-dd로 지정해야 하는 요건은 문자열 데이터형과 datetime이어야 함을 의미합니다.

하지만 솔직히 말하면, 당신이 그럴만한 이유가 없다면, 나는 고객에게 그것을 할 것입니다.

사용하실 수도 있습니다.이는 새 데이터 유형을 사용하여 수행됩니다.DATE모든 이전 버전에서는 작동하지 않을 수 있지만 이후 버전에서는 사용하기 위해 대폭 간소화되었습니다.

SELECT CAST(getdate() AS DATE)
SELECT LEFT(CAST(getdate() AS DATE), 7)

날짜 대신 날짜로 사용하고 싶은 경우varchar나중에 다시 변환하는 것을 잊지 마십시오.

select convert(datetime,CONVERT(char(10), GetDate(),126))

SQL Server 2008에서는 다음을 수행할 수 있습니다.CONVERT(date,getdate())

SELECT CONVERT(NVARCHAR(20), GETDATE(), 23)

다음을 사용합니다.

CONVERT(char(10),GETDATE(),126)
SELECT Code,Description FROM TABLE

-- This will Include only date part of 14th March 2010. Any date with date companents will not be considered.
WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate <= DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))

-- This will Include the whole day of 14th March 2010
--WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate < DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))

각 변환/캐스트 함수에 대해 CASE 문을 사용하는 것은 항상 유효합니다.

table XXXY를 테이블명으로 대체하고 issueDate_dat을 해당 테이블의 datetime 필드명으로 대체하십시오.

SELECT  issueDate_dat, CONVERT(varchar, DATEPART(yyyy, issuedate_dat))  AS issueDateYYYY
, CASE WHEN (len(CONVERT(varchar, DATEPART(mm, issuedate_dat))) < 2) THEN '0' +CONVERT(varchar, DATEPART(mm, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(mm, issuedate_dat)) END AS  issueDateMM
, CASE WHEN (len(CONVERT(varchar, DATEPART(dd, issuedate_dat))) <2) THEN '0' +CONVERT(varchar, DATEPART(dd, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(dd, issuedate_dat)) END AS issueDateDD
FROM            tableXXXXY

도움이 됐으면 좋겠네요.샤그버트

이 솔루션은 심플하고 효과적이다(126개도)

CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)
 IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);

cmdGetPaymentStatement.Parameters.AddWithValue("@pStartDate", DateTime.Parse("22/12/2017", culture, System.Globalization.DateTimeStyles.AssumeLocal)).IsNullable = true;

데이트 상대를 슬래시로 구분하고 싶다면 이상한 짓은 하지 않아도 될 것 같아.그냥 백슬래시로 탈출해.그렇지 않으면 점으로 끝납니다.

SELECT FORMAT(GETDATE(),'yyyy\/MM');  

SQL Server 2016에서 테스트 완료

소스 날짜 형식이 모두 엉망인 경우 다음과 같은 방법을 시도해 보십시오.

select
convert(nvarchar(50),year(a.messedupDate))+'-'+
(case when len(convert(nvarchar(50),month(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),month(a.messedupDate))+'-' 
    else convert(nvarchar(50),month(a.messedupDate)) end)+
(case when len(convert(nvarchar(50),day(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),day(a.messedupDate))+'-'
    else convert(nvarchar(50),day(a.messedupDate)) end) 
from messytable a

String 가공은 비싸고 FORMAT이 더 높기 때문에 Asher/Aaron Dietz의 응답은 top이 아니더라도 높지 않은 것에 놀랐습니다.질문은 ISO 8601 날짜를 요구하고 있고, string type으로 특별히 요구하는 것은 아닙니다.

가장 효율적인 방법은 다음 중 하나입니다(완성을 위해 Asher/Aaron Dietz가 이미 제안한 답변을 포함했습니다).

모든 버전

select  cast(getdate() as date)
select  convert(date, getdate())

2008년 이후

select  convert(date, current_timestamp)

ANSI SQL 동등 2008 이상

select  cast(current_timestamp as date)

참고 자료:

https://sqlperformance.com/2015/06/t-sql-queries/format-is-nice-and-all-but

https://en.wikipedia.org/wiki/ISO_8601

https://www.w3schools.com/sql/func_sqlserver_current_timestamp.asp

https://learn.microsoft.com/en-us/sql/t-sql/functions/current-timestamp-transact-sql?view=sql-server-ver15

GetDate()를 String 형식으로 변경합니다.

SELECT FORMAT(GetDate(), 'yyyy-MM-dd HH:mm:ss')

언급URL : https://stackoverflow.com/questions/889629/how-to-get-a-date-in-yyyy-mm-dd-format-from-a-tsql-datetime-field

반응형