TSQL 날짜 시간 필드에서 YYYY-MM-DD 형식으로 날짜를 얻는 방법은 무엇입니까?
SQL Server에서 날짜 YYYY-MM-DD
형식을 어떻게 검색 합니까? SQL Server 2000 이상에서 작동하려면 이것이 필요합니다. SQL Server 에서이 작업을 수행하는 간단한 방법이 있습니까, 아니면 결과 집합을 검색 한 후 프로그래밍 방식으로 쉽게 변환 할 수 있습니까?
Microsoft Technet 에서 CAST 및 CONVERT 를 읽었 지만 원하는 형식이 나열되지 않고 날짜 형식을 변경하는 것은 옵션이 아닙니다.
SELECT CONVERT(char(10), GetDate(),126)
원하지 않는 시간 부분의 varchar chops 크기를 제한합니다.
시작 SQL 서버 2012 (원래의 질문은 2000입니다) :
SELECT FORMAT(GetDate(), 'yyyy-MM-dd')
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
귀하가 따르는 양식은 온라인 설명서에 나와 있습니다.
http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx
예를 들어 다음을 시도하십시오.
select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)
convert
형식 지정자 120이 있는 함수는 "yyyy-MM-dd HH : mm : ss"형식을 제공하므로 날짜 부분 만 가져 오려면 길이를 10으로 제한하면됩니다.
convert(varchar(10), theDate, 120)
그러나 날짜 형식은 일반적으로 데이터베이스 나 비즈니스 계층이 아닌 프레젠테이션 계층에서 수행하는 것이 좋습니다. 데이터베이스에서 형식화 된 날짜를 리턴하면, 계산을 수행해야하는 경우 클라이언트 코드가 날짜로 다시 구문 분석해야합니다.
C #의 예 :
theDate.ToString("yyyy-MM-dd")
YYYYMMDD의 경우
select convert(varchar,getDate(),112)
SQLServer2008에서만 테스트했습니다.
다른 방법은 ...
CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime))
replace(convert(varchar, getdate(), 111), '/','-')
또한 "무엇을 잘라 내지 않고"속임수를 쓸 것입니다.
누군가가 다른 방법으로 그것을하고 싶어하고 이것을 발견하는 경우.
select convert(datetime, '12.09.2014', 104)
독일어 날짜 형식의 문자열을 날짜 / 시간 객체로 변환합니다.
왜 104? 여기를 참조하십시오 : http://msdn.microsoft.com/en-us/library/ms187928.aspx
시간 부분을 원하는 사람들에게 (내가 한) 다음 스 니펫이 도움이 될 수 있습니다.
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
캐스트 및 변환 링크에서 스타일 126을 사용하십시오.
CONVERT (varchar(10), DTvalue, 126)
시간이 잘립니다. yyyy-mm-dd로 요구 사항은 문자열 데이터 유형 및 날짜 시간이어야 함을 의미합니다.
솔직히 말하면, 당신이하지 않는 좋은 이유가 없다면 클라이언트에서 할 것입니다.
varchar
나중에 다시 날짜 대신 날짜로 사용하려면 다시 변환하는 것을 잊지 마십시오.
select convert(datetime,CONVERT(char(10), GetDate(),126))
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))
SQL Server 2008에서 다음을 수행 할 수 있습니다. CONVERT(date,getdate())
사용할 수도 있습니다. 이것은 새로운 데이터 유형을 사용하는 것 DATE
입니다. 모든 이전 버전에서 작동하지는 않지만 이후 버전에서 사용하기 위해 크게 단순화되었습니다.
SELECT CAST(getdate() AS DATE)
SELECT LEFT(CAST(getdate() AS DATE), 7)
각 변환 / 캐스트 함수에 대해 CASE 문을 사용하면 항상 효과적입니다.
tableXXXXY를 테이블 이름으로 바꾸고 issueDate_dat를 해당 테이블의 날짜 시간 필드 이름으로 바꾸십시오.
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)
소스 날짜 형식이 모두 엉망인 경우 다음 행을 따라 시도하십시오.
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
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;
'IT story' 카테고리의 다른 글
숫자 및 범위가있는 AngularJS For 루프 (0) | 2020.04.05 |
---|---|
PHP 스크립트의 실행 시간을 측정하는 정확한 방법 (0) | 2020.04.05 |
정적 초기화 블록 (0) | 2020.04.05 |
밀리 초 단위로 시간을 가져 오는 명령 (0) | 2020.04.05 |
MyISAM과 InnoDB의 차이점은 무엇입니까? (0) | 2020.04.05 |