Convert month and year columns to a date column with additional string concatination

时间:2017-03-09 08:36:35

标签: sql sql-server

My TB1

MONTH    YEAR 
-----    ----
2        2015

How to Convert month and year columns to a date column with additional string concatenation :-

M_DELIVERY            Description
----------           -------------
FEB-15              DELIVERY FOR FEB 2015

2 个答案:

答案 0 :(得分:1)

假设您正在使用日期和MSSQL2012 +:

SELECT  UPPER( FORMAT(CONVERT(datetime, '2017-02-01',121),'MMM')) + '-' +RIGHT(CAST( YEAR( CONVERT(datetime, '2017-02-01',121)) AS VARCHAR(4)),2) M_DELIVERY
, 'DELIVERY FOR ' +UPPER( FORMAT(CONVERT(datetime, '2017-02-01',121),'MMM'))+' '+ CAST( YEAR( CONVERT(datetime, '2017-02-01',121)) AS VARCHAR(4)) AS Description

其他方式(使用数字而非日期): (您可以更改月份名称缩写。)

SELECT  SUBSTRING('GENFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC',1+(MONTH_NUMB-1)*3,3)+'-'+ RIGHT(YEAR_NUMB,2) AS M_DELIVERY
    , 'DELIVERY FOR ' + SUBSTRING('GENFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC',1+(MONTH_NUMB-1)*3,3)+' '+ CAST(YEAR_NUMB AS VARCHAR(4)) AS DESCRIPTION
    FROM /* sample data */ (SELECT 2 AS MONTH_NUMB, 2015 AS YEAR_NUMB
          UNION SELECT 12 AS MONTH_NUMB, 2017 AS YEAR_NUMB
          UNION SELECT 1 AS MONTH_NUMB, 2016 AS YEAR_NUMB) X

后者的输出:

M_DELIVERY DESCRIPTION
---------- ---------------------
GEN-16     DELIVERY FOR GEN 2016
FEB-15     DELIVERY FOR FEB 2015
DIC-17     DELIVERY FOR DEC 2017

答案 1 :(得分:1)

您的问题非常简洁" ...对于您的下一个问题,请阅读How to ask a good SQL questionHow to create a MCVE

为此你可以像这里一样试试:

DECLARE @Dummy TABLE(TheMonth INT,TheYear INT);
INSERT INTO @Dummy VALUES(2,2015),(5,2017);

SELECT d.TheMonth
      ,d.TheYear
      ,A.AsDateTime
      ,UPPER(CONVERT(VARCHAR(3),A.AsDateTime,100)) + '-' + RIGHT(CONVERT(VARCHAR(100),A.AsDateTime,101),2) AS ShortString
      ,'DELIVERY FOR ' + UPPER(CONVERT(VARCHAR(3),A.AsDateTime,100)) + ' ' + CAST(d.TheYear AS VARCHAR(4)) AS LongString
FROM @Dummy AS d
CROSS APPLY(SELECT CAST(CAST(d.TheYear AS VARCHAR(4)) + REPLACE(STR(d.TheMonth,2),' ','0')+'01' AS DATETIME)) AS A(AsDateTime);

返回

M   Y       AsDateTime              ShortString LongString
2   2015    2015-02-01 00:00:00.000 FEB-15      DELIVERY FOR FEB 2015
5   2017    2017-05-01 00:00:00.000 MAI-17      DELIVERY FOR MAI 2017

您没有提供SQL Server的版本。从2012年开始,您可以通过FORMATCONCAT

轻松实现这一目标

提示:注意文化/语言设置!

正如你所看到的,我的系统产生了#34; Mai"这是" May"的德语拼写。文化依赖格式(甚至更糟糕的是:依赖于语言的格式)是非常危险的......