Как добавить поле месяца в оператор выбора в SQL Server 2012?

Мой код:

create table t_AccountTransactions
(
    CompanyID varchar(50) ,
    RecordID int ,
    Branch varchar(100) ,
    Year int,
    Month varchar(2),
    Date_Gregorian date,
    Date_Persian varchar(100),
    VoucherType varchar(100),
    VoucherNumber varchar(100),
    Row varchar(100),
    AccountNumber_SL varchar(100),
    AccountNumber_DL varchar(100)
)

insert into t_AccountTransactions (RecordID, CompanyID, Branch, Year, Month, Date_Gregorian, Date_Persian, VoucherType, VoucherNumber, Row, AccountNumber_SL, AccountNumber_DL)
   select 
      item.VchItmId, @CompanyID, hdr.BranchCode, hdr.Year,
      right('0' + DATEPART(month,hdr.Month),2),  
      hdr.VchDate, 'Date_Persian', Vtype.Title, hdr.Num,
      item.Seq, item.SLRef, item.DLRef
   from 
      SgDb1_dat.ACC.AccVchHdr as hdr, SgDb1_dat.ACC.AccVchItm as item, SgDb1_dat.ACC.AccVchType as Vtype
   where 
      hdr.HdrVchID = item.HdrRef 
      and hdr.Ctgry = vtype.Code

В моей таблице месяц будет отображаться как 1,2,3,4,... Я хочу изменить его, чтобы он отображался, например, 01,02,03 и...

Пожалуйста, помогите мне, как я могу изменить свой оператор выбора для этой цели.

благодарю вас.


person Arash    schedule 07.08.2014    source источник
comment
Плохие привычки: использование JOIN в старом стиле — этот старый стиль разделенный запятыми список таблиц больше не должен использоваться, вместо этого используйте правильный Синтаксис ANSI JOIN из стандарта ANSI-92 SQL (представлен более 20 лет назад)   -  person marc_s    schedule 07.08.2014


Ответы (1)


Вы можете что-то вроде этого:

 select case when DATEPART(month,getdate())<10
        then '0'+DATEPART(month,getdate())
        else DATEPART(month,getdate())
 end

Ваш полный код будет:

insert into t_AccountTransactions (RecordID,CompanyID,Branch,Year,Month,Date_Gregorian,Date_Persian,VoucherType,VoucherNumber,Row,AccountNumber_SL,AccountNumber_DL)
select item.VchItmId,@CompanyID,hdr.BranchCode,hdr.Year,
case when DATEPART(month,hdr.Month)<10 then '0'+DATEPART(month,hdr.Month) else DATEPART(month,hdr.Month) end ,hdr.VchDate,'Date_Persian',Vtype.Title,hdr.Num,item.Seq,item.SLRef,item.DLRef
        from SgDb1_dat.ACC.AccVchHdr as hdr , SgDb1_dat.ACC.AccVchItm as item , SgDb1_dat.ACC.AccVchType as Vtype
            where hdr.HdrVchID=item.HdrRef and hdr.Ctgry = vtype.Code

ОБНОВИТЬ :

измените раздел case на этот:

case when DATEPART(month,hdr.Month)<10 then '0'+CAST(DATEPART(month,hdr.Month) as varchar) else    CAST(DATEPART(month,hdr.Month) as varchar) end 

Помните, что в операторе case все результаты должны быть одного типа.

person Saman Gholami    schedule 07.08.2014
comment
это не имело эффекта. - person Arash; 07.08.2014
comment
примечание: месяц объявлен как varchar(2) - person Arash; 07.08.2014
comment
все равно не работает!!! - person Arash; 07.08.2014
comment
Какая у вас версия sql? пожалуйста, обновите свой код - person Saman Gholami; 07.08.2014
comment
его 2012 год. обновление сделано. - person Arash; 07.08.2014
comment
дело не только в дате, обычно я хочу преобразовать любое 1-значное число в 2-значное с первым нулем, то есть 01,02,03. - person Arash; 07.08.2014