2016-11-10 3 views
0

Попытка вывода что-то вроде:Выходной год и месяц со строкой

2016,11

Использование этого:

SELECT 
CONVERT(VARCHAR(20),YEAR(GETDATE()) + ',' + MONTH(GETDATE())) AS YearMonth 

Могу ли я что-то отсутствует в обращенного? Потому что я получаю эту ошибку:

Conversion failed when converting the varchar value ',' to data type int.

Благодарности

+1

Какие СУБД вы используете? –

+0

'YEAR()' и 'MONTH()' оба возвращают число. Вы должны преобразовать их отдельно, чтобы использовать их в конкатенации строк. Ошибка возникает из-за 'YEAR (GETDATE()) + ',' + MONTH (GETDATE())', который принимается как * второй параметр для 'CONVERT' всего ... – Shnugo

+0

Хрыс, один вопрос: как насчет месяц ниже 10? Ожидаете ли вы * 2016,2 * или * 2016,02 * (см. Начальный ноль в '02')? – Shnugo

ответ

1

Попробуйте это.

SELECT 
CONVERT(VARCHAR(20),YEAR(GETDATE())) + ',' + CONVERT(VARCHAR(20), MONTH(GETDATE())) AS YearMonth 
0

Вы пропавшие преобразования выходного сигнала MONTH() в строку. Вот один способ:

select datename(year, getdate()) + ',' + cast(month(getdate()) as varchar(255)) as YearMonth 

datename() удобен тем, что он возвращает строку. К сожалению, в течение месяца он возвращает имя месяца, а не число.

Вы также можете сделать:

select replace(convert(varchar(7), getdate(), 120), '-', ',') 

Или использовать format() в SQL Server 2012+:

select format(getdate(), 'yyyy,MM') 
+0

Я думаю, вы хотели конвертировать с 120, а не из 12 ... Btw: Не уверен ли он полагаться на символы разделителя (например, дефис в этом случае)? – Shnugo

+0

@Shnugo. , , Спасибо. Я стремился к 120 или 121. –

0

Вы можете использовать CONVERT с 112 до достижения строки без разделителей ("20161110"). Преобразование этого значения в VARCHAR(*6*) неявно сократит день. Один (в большинстве случаев положительный) побочный эффект: вы получите низкий месяц с нулевым запасом (например, 2016,04). Затем я использую STUFF, чтобы вставить ,:

SELECT STUFF(CONVERT(VARCHAR(6),GETDATE(),112),5,0,',') 

Если вам не нравится нулевой проложенный месяц, вы могли бы заменить 0 в STUFF, как это:

DECLARE @d DATETIME={d'2016-04-05'}; 
SELECT STUFF(CONVERT(VARCHAR(6),@d,112),5,CASE WHEN MONTH(@d)<10 THEN 1 ELSE 0 END,',') 
Смежные вопросы