35 votes

Convertir AAAAMM à MMMYY

J'ai une période de 201604 (de type nvarchar). Est-il possible que je peux convertir 201604 de APR16?

44voto

MotoGP Points 35270

Utiliser l' DATENAME & SUBSTRING fonctions, comme ceci:

declare @str nvarchar(50) = '201604'

select UPPER(left(datename(mm,cast(@str+'01' as date)),3))+substring(@str,3,2) --APR16

17voto

Bridge Points 8880

C'est un peu moche, mais vous ne pouvez pas utiliser de l'intégré dans le formatage de la date des trucs comme est. Se sentir libre échange de l'instruction du cas d'une jointure si vous disposez d'un mois, les noms de table, etc.:

DECLARE @exampleVal NVARCHAR(6) = '201604';

SELECT CASE SUBSTRING(@exampleVal, 5, 2)
         WHEN '01' THEN 'JAN'
         WHEN '02' THEN 'FEB'
         WHEN '03' THEN 'MAR'
         WHEN '04' THEN 'APR'
         WHEN '05' THEN 'MAY'
         WHEN '06' THEN 'JUN'
         WHEN '07' THEN 'JUL'
         WHEN '08' THEN 'AUG'
         WHEN '09' THEN 'SEP'
         WHEN '10' THEN 'OCT'
         WHEN '11' THEN 'NOV'
         WHEN '12' THEN 'DEC'
       END +
       SUBSTRING(@exampleVal, 3, 2)

9voto

Joe Taras Points 4050

Essayez ceci:

Ajouter '01' (comme le premier jour du mois), afin de convertir votre varchar datetime et obtenir le datename du mois:

declare @myperiod nvarchar(10)
SET @myperiod = '201604'

SET @myperiod = @myperiod + '01'

SELECT UPPER(SUBSTRING(DATENAME(month, CONVERT(datetime, @myperiod)), 1, 3)) +
  SUBSTRING(CONVERT(varchar, DATEPART(year, CONVERT(datetime, @myperiod))), 3, 4)

7voto

TheGameiswar Points 21

Ajouter 01 lors de la dernière, de sorte qu'il change à une date valide format. Ensuite, utilisez la datename fonction:

DECLARE @STRING VARCHAR(10)='201604'

SELECT DATENAME(MONTH,@STRING+'01') +' '+SUBSTRING(@STRING,3,2)

Sortie:

April 16

6voto

Whencesoever Points 1458

En deux lignes:

declare @napis varchar(6)='201506'
SELECT UPPER(LEFT(DATENAME(month, @napis+'01'),3)) + SubString(@napis,3,2)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X