2016-10-05 2 views
0

Я пытаюсь создать varchar (20), который составляет 4 символа года + 2 символа месяца. Я хотел бы использовать это как параметр в моей хранимой процедуре. Im не удалось объединить 2 varchars вместе, чтобы произвести это, любые идеи?Concat 2 varchars в SQL

SELECT 
    GETDATE() AS CurrentDateTime, 
    CONVERT(VARCHAR(20), YEAR(GETDATE())) AS CurrentYear, 
    CONVERT(VARCHAR(20), MONTH(GETDATE())) AS CurrentMonth, 
    CurrentYear + CurrentMonth AS YearMonth 
+2

Псевдонимы столбцов недоступны в списке выбора. Либо конвертирует еще один раз, либо завершает его в производной таблице. – jarlh

+1

'Im неспособный конкатенировать' вы имеете в виду иметь ошибку? Затем опубликуйте сообщение об ошибке. Пожалуйста, прочитайте [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t И вот отличное место для [** START **] (http : //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/), чтобы узнать, как улучшить качество вопроса и получить лучшие ответы. –

+1

Ваши значения varchar выглядят чрезмерно большими здесь. Нет необходимости в 20 символах для хранения 4 или 2 символов. Нет лет лет, чем 4 символа, и нет месяцев дольше, чем 2, :) –

ответ

0

Нравится этот?

SELECT GETDATE() AS CurrentDateTime 
, Convert(VARCHAR(20),YEAR(GETDATE())) AS CurrentYear 
, Convert(VARCHAR(20),MONTH(GETDATE())) AS CurrentMonth 
, Convert(VARCHAR(20),YEAR(GETDATE())) + Convert(VARCHAR(20),MONTH(GETDATE())) AS YearMonth 

Также вы можете

Year(GetDate()) * 100 + Month(GateDate()) AS YearMonth 

или использовать конструкцию, которая предложена пользователями ниже

Convert(varchar(6), GETDATE(), 112) AS YearMonth 
+0

Все эти транзакции возвращают комбинацию yearmonth. Я пытаюсь использовать это как значение параметра sql, не возвращая эти переменные. –

+1

@ jon.nicholssoftware.com Вы должны просто использовать 'convert (varchar (6), gatdate(), 112)' вместо двух преобразований и затем конкатенировать результаты. – iamdave

+0

Этот ответ получил признание, но есть гораздо лучшие решения ... (например, @Squirrel с 'Convert (varchar (6), GETDATE(), 112)') – Shnugo

1
SELECT GETDATE() AS CurrentDateTime 
, Convert(VARCHAR(20),YEAR(GETDATE())) + 
Convert(VARCHAR(20),MONTH(GETDATE())) 

Колонок псевдонимы не могут быть выбраны, так что выше будет делать.

+0

Как насчет месяцев с января по сентябрь (OP: * + 2 символа месяца *)? – Shnugo

3

почему бы не просто

SELECT GETDATE() AS CurrentDateTime 
, Convert(VARCHAR(20),YEAR(GETDATE())) AS CurrentYear 
, Convert(VARCHAR(20),MONTH(GETDATE())) AS CurrentMonth 
, Convert(varchar(6), GETDATE(), 112) AS YearMonth 
6

Самый простой подход будет использовать этот :

SELECT Format(GetDate(), 'yyyyMM') as YearMonth 

Функция Format() была introduced with Sql Server 2012.

+1

+1 Я также копаю функцию Format(), но производительность на больших наборах ужасна. https://sqlperformance.com/2015/06/t-sql-queries/format-is-nice-and-all-but –