[SQL] 정수와 일, 월 및 연도 주어진 SQL Server에서 날짜를 만드는 방법
SQL정수와 일, 월 및 연도 주어진 SQL Server에서 날짜를 만드는 방법
예를 들어 내가있는 경우 :
DECLARE @Day int = 25
DECLARE @Month int = 10
DECLARE @Year int = 2016
나는 돌아가려면
2016-10-25
날짜 또는 날짜로
해결법
-
==============================
1.SQL 서버 2012+, 당신은) (datefromparts을 사용할 수 있습니다 :
SQL 서버 2012+, 당신은) (datefromparts을 사용할 수 있습니다 :
select datefromparts(@year, @month, @day)
이전 버전에서는 문자열을 캐스팅 할 수 있습니다. 여기에 한 가지 방법은 다음과 같습니다
select cast(cast(@year*10000 + @month*100 + @day as varchar(255)) as date)
-
==============================
2.SQL 서버 2012+, 당신은) (DATEFROMPARTS을 사용할 수 있습니다 :
SQL 서버 2012+, 당신은) (DATEFROMPARTS을 사용할 수 있습니다 :
DECLARE @Year int = 2016, @Month int = 10, @Day int = 25; SELECT DATEFROMPARTS (@Year, @Month, @Day);
이전 버전에서는 하나의 방법은 문자열을 생성하고 변환하는 것입니다.
SQL 서버는 신뢰성에 관계없이 날짜, 언어 또는 국제화 설정의 해석 몇 가지 문자열 날짜 형식이 있습니다.
https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetime-transact-sql
형식은 'YYYYMMDD'의 문자열 그래서 항상 제대로 해석됩니다.
(ISO 8601-- YYYY-MM ISO 형식은 : mm : 또한 작동 ss--,하지만 당신은 시간을 지정해야하고 따라서 더 당신이 필요로하는 것보다 복잡.)
당신은 단순히 날짜로이 문자열을 CAST 수 있지만, 당신은 스타일을 지정하기 위해 CONVERT를 사용해야하며 (즉 문제의 경우 당신에게) 결정적하기 위해 스타일을 지정해야합니다.
은 "yyyymmdd '형식은 다음과 같이 전환 외모 때문에, 스타일 (112)입니다 :
DECLARE @Year int = 2016, @Month int = 10, @Day int = 25; SELECT CONVERT(date,CONVERT(varchar(50),(@Year*10000 + @Month*100 + @Day)),112);
그리고 그것은 결과 :
기술적으로, ISO / 112 / YYYYMMDD 형식으로도 지정된 다른 스타일로 작동합니다. 예를 들어, 스타일로 텍스트 형식을 사용하여 104 (독일어, DD.MM.YYYY) :
DECLARE @Year int = 2016, @Month int = 10, @Day int = 25; SELECT CONVERT(date,CONVERT(varchar(50),(@Year*10000 + @Month*100 + @Day)),104);
또한 아직 결과 :
다른 형식은 강력한으로하지 않습니다. 예를 들어,이 :
SELECT CASE WHEN CONVERT(date,'01-02-1900',110) = CONVERT(date,'01-02-1900',105) THEN 1 ELSE 0 END;
결과 :
사이드 참고로,이 방법으로 유효하지만 잘못된 날짜를 얻을 수 넌센스 입력을 조심 :
DECLARE @Year int = 2016, @Month int = 0, @Day int = 1025; SELECT CONVERT(date,CONVERT(varchar(50),(@Year*10000 + @Month*100 + @Day)),112);
또한 산출한다 :
DATEFROMPARTS가 잘못 입력으로부터 사용자를 보호합니다. 이:
DECLARE @Year int = 2016, @Month int = 10, @Day int = 32; SELECT DATEFROMPARTS (@Year, @Month, @Day);
수익률 :
또한이 방법은 1000년 1월 1일 이전 날짜에 대해 작동하지 않습니다 조심. 예를 들면 :
DECLARE @Year int = 900, @Month int = 1, @Day int = 1; SELECT CONVERT(date,CONVERT(varchar(50),(@Year*10000 + @Month*100 + @Day)),112);
수익률 :
그의는 결과 문자열 때문에, '9000101'는 'YYYYMMDD'형식이 아닙니다. 적절한 형식을 보장하기 위해, 당신은 성능의 일부 소량의 희생, 선행 0으로 패드를해야 할 것이다. 예를 들면 :
DECLARE @Year int = 900, @Month int = 1, @Day int = 1; SELECT CONVERT(date,RIGHT('000' + CONVERT(varchar(50),(@Year*10000 + @Month*100 + @Day)),8),112);
결과 :
문자열 변환을 제외하고 다른 방법이 있습니다. 몇몇은 "T-SQL과 날짜를 만들기"에 대한 답변에서 제공됩니다. 주목할만한 예는 "제로 날짜"를 년, 월, 일을 추가하여 날짜를 만드는 작업이 포함됩니다.
(이 답변은 내가에 확장 및 추가 문서 및 메모를 제공 고든 리노 프의 대답에 의해 영감을했다.)
-
==============================
3.다음 코드는 내가 믿는 SQL 서버의 모든 버전에서 작동합니다 :
다음 코드는 내가 믿는 SQL 서버의 모든 버전에서 작동합니다 :
SELECT CAST(CONCAT(CAST(@Year AS VARCHAR(4)), '-',CAST(@Month AS VARCHAR(2)), '-',CAST(@Day AS VARCHAR(2))) AS DATE)
-
==============================
4.올드 마이크로 소프트 SQL 서버 (<2012)
올드 마이크로 소프트 SQL 서버 (<2012)
RETURN dateadd(month, 12 * @year + @month - 22801, @day - 1)
-
==============================
5.그래서, 당신은이 솔루션을 시도 할 수 있습니다 :
그래서, 당신은이 솔루션을 시도 할 수 있습니다 :
DECLARE @DAY INT = 25 DECLARE @MONTH INT = 10 DECLARE @YEAR INT = 2016 DECLARE @DATE AS DATETIME SET @DATE = CAST(RTRIM(@YEAR * 10000 + @MONTH * 100 + @DAY) AS DATETIME) SELECT REPLACE(CONVERT(VARCHAR(10), @DATE, 102), '.', '-') AS EXPECTDATE
또는이에게 몇 줄의 코드를 시도 할 수 있습니다 :
DECLARE @DAY INT = 25 DECLARE @MONTH INT = 10 DECLARE @YEAR INT = 2016 SELECT CAST(RTRIM(@YEAR * 10000 +'-' + @MONTH * 100+ '-' + @DAY) AS DATE) AS EXPECTDATE
-
==============================
6.선택 변환 (VARCHAR (11), transfer_date, 106)
선택 변환 (VARCHAR (11), transfer_date, 106)
나에게 2018 3월 7일로 포맷 된 날짜의 내 원하는 결과를 얻었다
내 열 'transfer_date'는 날짜 형식 열 내가 푸른에 SQL 서버 2017을 사용하고 있습니다
-
==============================
7.MONTH 해 SQL을 사용하여 생성 날짜 :
MONTH 해 SQL을 사용하여 생성 날짜 :
DECLARE @FromMonth int=NULL, @ToMonth int=NULL, @FromYear int=NULL, @ToYear int=NULL /**Region For Create Date**/ DECLARE @FromDate DATE=NULL DECLARE @ToDate DATE=NULL SET @FromDate=DateAdd(day,0, DateAdd(month, @FromMonth - 1,DateAdd(Year, @FromYear-1900, 0))) SET @ToDate=DateAdd(day,-1, DateAdd(month, @ToMonth - 0,DateAdd(Year, @ToYear-1900, 0))) /**Region For Create Date**/
from https://stackoverflow.com/questions/35576983/how-to-create-a-date-in-sql-server-given-the-day-month-and-year-as-integers by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은 년, 월, 일 필드에서 날짜를 만들기 (0) | 2020.07.04 |
---|---|
[SQL] NOT LIKE IN과 SQL 쿼리 (0) | 2020.07.04 |
[SQL] 선택 권한, 데이터베이스 'mssqlsystemresource', 스키마 'SYS'대상 '을 sysobjects'에 거부 (0) | 2020.07.04 |
[SQL] SQL 쿼리는 객실 가용성을 검색합니다 (0) | 2020.07.04 |
[SQL] 어떻게 교리 andWhere 및 orWhere를 사용 하는가? (0) | 2020.07.04 |