2013-02-20 37 views
31

Tôi có cột số nguyên "Tháng" Tôi muốn nhận được 2 chữ số trong tháng.Nhận số có 2 chữ số cho tháng

Đây là những gì tôi đã cố gắng: DATEPART (mm, @date)

Nó trả về một con số trong tháng tháng một-Tháng Chín Tôi đang sử dụng SQL Server 2008

Bất cứ ai cũng có gợi ý?

+0

Xem chủ đề này cho rất nhiều lựa chọn: http://stackoverflow.com/questions/1914682/t-sql-format-integer-to -2-digit-string –

+1

Tôi đã xem qua điều này với cùng một câu hỏi nhưng đối với SQL Server 2012. Dựa trên câu trả lời của user3829053, tôi đã làm việc với phiên bản đó ít nhất, chọn định dạng (tháng (@Date), '00'), hoặc chọn định dạng (datepart (mm, @Date), '00') hoạt động. – David

Trả lời

44

có những cách khác nhau để làm việc đó

  • Sử dụng RTRIM và chỉ định phạm vi:

như

SELECT RIGHT('0' + RTRIM(MONTH('12-31-2012')), 2); 
  • Sử dụng xâu để vừa giải nén ra tháng phần sau khi chuyển đổi ngày thành văn bản

như

SELECT SUBSTRING(CONVERT(nvarchar(6),getdate(), 112),5,2) 

xem Fiddle

Có thể có các cách khác để thực hiện việc này.

+0

Tôi không nhận được số 0 đứng đầu. Vì loại cột là số nguyên, làm thế nào để có được kết quả? Loại cột có phải là char để hoạt động không? – Adam

+0

có vẻ như loại atributte phải là char. Sau đó, tôi nhận được kết quả mong muốn. Tôi đoán không có cách nào để có được kết quả tương tự với số nguyên như kiểu atrubutte. Hoặc là? – Adam

+0

sẽ dễ dàng hơn nhiều nếu bạn có thể thay đổi định dạng của tháng mà bạn muốn so sánh tháng. như nếu bạn nhận được giá trị của @month int = 2 và bạn muốn so sánh giá trị của/@ month_compare varchar (20) với giá trị '02' thì chỉ cần nhập/@ month_compare vào int trước khi thực hiện thay đổi kiểu dữ liệu cột tháng. –

1

append 0 trước khi nó bằng cách kiểm tra nếu giá trị nằm giữa 1 và 9 bằng cách đầu tiên đúc nó để varchar

select case when DATEPART(month, getdate()) between 1 and 9 
then '0' else '' end + cast(DATEPART(month, getdate()) as varchar(2)) 
+0

loại thuộc tính là số nguyên. – Adam

3

Thay thế cho DATEPART

SELECT LEFT(CONVERT(CHAR(20), GETDATE(), 101), 2) 
12

Pinal Dave có một bài viết hay với một số ví dụ về cách add trailing 0s to SQL numbers.

Một cách là sử dụng RIGHT chức năng, trong đó sẽ đưa ra một cái gì đó tuyên bố như sau:

SELECT RIGHT('00' + CAST(DATEPART(mm, @date) AS varchar(2)), 2) 
+0

Tôi không nhận được kết quả mong muốn. có thể là studio quản lý máy chủ sql được thiết lập để bỏ qua hàng đầu không? – Adam

+0

@Adam - Hãy thử xem nếu thay thế @date bằng 'GETDATE()' có tạo sự khác biệt không? – SchmitzIT

1

Hãy thử:

select right ('0'+convert(nvarchar(2), DATEPART(mm, getdate())),2) 
35

Chức năng

FORMAT(date,'MM') 

sẽ thực hiện công việc với hai chữ số.

+4

Nhập vào SQL Server 2012. Câu hỏi nêu rõ sử dụng 2008. – mcNux

+1

Tôi đã tìm kiếm giải pháp như thế này, bởi vì tôi biết hàm này từ Python. Trên thực tế tôi không biết nó là mới từ năm 2012. –

+0

Điều này làm việc tuyệt vời! Lưu ý để nói rằng điều này yêu cầu đầu vào là biến ngày, không chỉ giống như biến ngày, ví dụ: FORMAT ('2017-01-01', 'MM') không thành công nhưng FORMAT (GETDATE(), 'MM') hoạt động. – Scott

5

Một thủ thuật đơn giản:

SELECT CONVERT(char(2), cast('2015-01-01' as datetime), 101) -- month with 2 digits 
SELECT CONVERT(char(6), cast('2015-01-01' as datetime), 112) -- year (yyyy) and month (mm) 

Đầu ra:

01 
201501 
0

Đối với tôi, giải pháp nhanh nhất là

DATE_FORMAT(CURDATE(),'%m') 
+0

Đây không phải là máy chủ tsql và Sql 2008 được gắn thẻ trong câu hỏi. – Thronk

0

Đơn giản chỉ cần có thể được sử dụng:

SELECT RIGHT('0' + CAST(MONTH(@Date) AS NVARCHAR(2)), 2) 
0

cách của tôi để làm việc đó là:

right('0'+right(datepart(month,[StartDate]),2),2) 

Lý do cho 'đúng' chức năng interanl là để ngăn chặn SQL từ làm nó như toán add - mà sẽ để lại cho chúng ta một chữ số một lần nữa.

1

CONVERT (char (2), getdate(), 101)

Các vấn đề liên quan