Mam kolumnę całkowitą "Miesiąc" Chciałbym uzyskać 2-cyfrowy numer na miesiąc.Uzyskaj 2 cyfry na miesiąc
To co próbowałem: DATEPART (mm @date)
Zwraca jedną cyfrę za miesiące styczeń-wrzesień Używam SQL Server 2008
Ktoś ma pomysł?
Mam kolumnę całkowitą "Miesiąc" Chciałbym uzyskać 2-cyfrowy numer na miesiąc.Uzyskaj 2 cyfry na miesiąc
To co próbowałem: DATEPART (mm @date)
Zwraca jedną cyfrę za miesiące styczeń-wrzesień Używam SQL Server 2008
Ktoś ma pomysł?
istnieją różne sposoby to zrobić
jak
SELECT RIGHT('0' + RTRIM(MONTH('12-31-2012')), 2);
jak
SELECT SUBSTRING(CONVERT(nvarchar(6),getdate(), 112),5,2)
zobaczyć Fiddle
Mogą istnieć inne sposoby, aby zdobyć to.
Nie otrzymuję wiodącego zera. Ponieważ typ kolumny jest liczbą całkowitą, w jaki sposób będzie to miało wpływ na wynik? Czy typ kolumny musi być zwrócony, aby działał? – Adam
wydaje się, że typ atlasu musi być char. Wtedy otrzymuję pożądany wynik. Przypuszczam, że nie ma sposobu, aby uzyskać taki sam wynik z liczbą całkowitą jak typ atrubutte. Lub? – Adam
będzie to znacznie łatwiejsze, jeśli zmienisz format miesiąca, w którym chcesz porównać miesiąc. np. jeśli otrzymasz wartość @month int = 2 i chcesz porównać wartość/@ month_compare varchar (20) z wartością '02', po prostu prześlij/@ month_compare do int, zanim to zrobisz, zmień typ danych kolumna miesiąca. –
dołączająca 0 do niego przez sprawdzenie, czy wartość mieści się między 1 a 9 przez pierwszą odlewania do varchar
select case when DATEPART(month, getdate()) between 1 and 9
then '0' else '' end + cast(DATEPART(month, getdate()) as varchar(2))
typem atrybutu jest liczba całkowita. – Adam
Pinal Dave ma fajny artykuł z kilkoma przykładami jak to zrobić add trailing 0s to SQL numbers.
Jednym ze sposobów jest użycie funkcji RIGHT
, która stałaby się coś oświadczenie jak następuje:
SELECT RIGHT('00' + CAST(DATEPART(mm, @date) AS varchar(2)), 2)
Spróbuj:
select right ('0'+convert(nvarchar(2), DATEPART(mm, getdate())),2)
Funkcja
FORMAT(date,'MM')
będzie wykonać zadanie z dwóch cyfr.
Dodano w SQL Server 2012. Pytanie podaje użycie 2008. – mcNux
Szukałem rozwiązania takiego jak to, ponieważ znam tę funkcję z Pythona. Właściwie nie wiedziałem, że jest nowy od 2012. –
To działało świetnie! Uwaga, że wymaga to, aby dane wejściowe były zmiennymi daty, a nie tylko wyglądały jak np. FORMAT ("2017-01-01", "MM") kończy się niepowodzeniem, ale działa FORMAT (GETDATE(), "MM"). – Scott
Kolejny prosty trik:
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)
Wyjścia:
01
201501
Dla mnie najszybszym rozwiązaniem było
DATE_FORMAT(CURDATE(),'%m')
To nie jest serwer tsql ani Sql 2008, który został oznaczony w pytaniu. – Thronk
Wystarczy można stosować:
SELECT RIGHT('0' + CAST(MONTH(@Date) AS NVARCHAR(2)), 2)
Mój sposób to zrobić to:
right('0'+right(datepart(month,[StartDate]),2),2)
Powodem „right” Funkcja interanl jest zapobieganie SQL z matematyki robi to jako dodatek - co pozostawi nas z jednej cyfry ponownie.
konwertowania (znak (2) getdate(), 101)
Patrz wątek o wiele opcji: http://stackoverflow.com/questions/1914682/t-sql-format-integer-to -2-cyfrowy-ciąg –
Natknąłem się na to z tym samym pytaniem, ale dla SQL Server 2012. Na podstawie odpowiedzi użytkownika3829053 opracowałem, że dla tej wersji przynajmniej wybierz format (miesiąc (@Date), '00'), lub wybierz format (datepart (mm, @Date), "00") działa. – David