แปลงวันที่ yyyy-mm-dd เป็นจำนวนเต็ม YYYYMM


17

ฉันจะแปลง @dateb ได้อย่างไร:

SET @dateb = dateadd(month, datediff(month, 0, getdate()) - 3, 0)

ที่ส่งกลับ2014-04-04เป็นวันที่เป็นจำนวนเต็ม201404

ขอบคุณ

คำตอบ:


19

ในเวอร์ชั่น 2012 หรือสูงกว่าคุณสามารถใช้formatฟังก์ชั่นเพื่อรับเพียงแค่ปีและเดือนจากนั้นจึงแสดงผลเป็นแบบ int

ในเวอร์ชันก่อนปี 2012 คุณสามารถทำการฟอร์แมตด้วยconvertฟังก์ชั่นจากนั้นจึงใช้งานได้

declare @dateb datetime
set @dateb = getdate()

select cast(format(@dateb,'yyyyMM') as int) --2012 or higher
select cast(convert(varchar(6),@dateb,112) as int) -- all versions


13

อาจจะค่อนข้างเป็นระเบียบ:

SELECT YEAR(@dateb)*100 + MONTH(@dateb);

1
ฉันเห็นด้วยกับสุดใจนี้ คุณมีวันที่ซึ่งมีฟิลด์ย่อยจำนวนเต็ม คุณต้องการจำนวนเต็ม ทำไมการประมวลผลสายอักขระบนโลก
Ross Presser

-1

สิ่งนี้จะเป็นเคล็ดลับสำหรับคุณหรือไม่?

set @dateb = cast(convert(varchar, dateadd(month, datediff(month, 0, getdate()) - 3, 0), 112) as int)

ขอโทษที่ฉันลืมคุณจะต้องมีซับสตริงด้วย ดังนั้นมันคือ:

select cast(substring(convert(varchar, dateadd(month, datediff(month, 0, getdate()) - 3, 0), 112), 0, 7) as int)

2
กรุณาอย่าใช้ varchar โดยไม่ต้องระบุความยาว
Aaron Bertrand

-1

วิธีอื่น:

DECLARE @PeriodToCalculate_DATE [DATE] ='2016-02-29'

SELECT 
   CAST(DATEPART(YYYY,@PeriodToCalculate_DATE) AS [CHAR](4))
       + RIGHT('0' + CAST(DATEPART(M,@PeriodToCalculate_DATE) AS [VARCHAR](2)),2)  
       + RIGHT('0' + CAST(DATEPART(D,@PeriodToCalculate_DATE) AS [VARCHAR](2)),2);

ให้: 20160229

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.