J'ai la colonne de temps, la valeur est 1Q1993 (QuarterYear), et je voudrais obtenir la date de fin de mois du trimestre (qui est 1993-03-31 ). S'il vous plaît, quelqu'un pourrait-il aider avec le SQL. J'ai besoin d'ajouter à une instruction select.
4 Réponses :
Vous pouvez utiliser extraire l'année, convertir en une date, puis ajouter quelques mois et soustraire un jour:
select (date(concat(right(col, 4), '-01-01') +
interval (left(col, 1) * 3 + 1) month -
interval 1 day
)
L'approche la plus simple pourrait être une expression de case :
select
concat(
right(mycol, 4),
'-'
case left(mycol, 1)
when '1' then '03-31'
when '2' then '06-30'
when '3' then '09-30'
when '4' then '12-30'
end
) as mydate
from mytable
Cela reconstruit une chaîne au format YYYY-MM-DD , que MySQL comprendra volontiers comme une date.
Vous pouvez utiliser ceci. Comme les dates sont fixes et ne bougent pas
| CONCAT(SUBSTRING_INDEX(@date,'Q',-1),
CASE SUBSTRING_INDEX(@date,'Q',1)
WHEN 1 THEN '-03-31'
WHEN 2 THEN '-06-30'
WHEN 3 THEN '-09-30'
ELSE '-12-31' END) |
| >:--------------------------------------------------------------------------------------->---------------------------------------------------------------------------------------->------- |
| 1993-03-31 |
SELECT CONCAT(SUBSTRING_INDEX(@date,'Q',-1), CASE SUBSTRING_INDEX(@date,'Q',1) WHEN 1 THEN '-03-31' WHEN 2 THEN '-06-30' WHEN 3 THEN '-09-30' ELSE '-12-31' END)SET @date := "1Q1993"
db <> violon ici
Une autre approche:
date(concat(substring_index(qtr,'Q',-1),'-01-01')) + interval substring_index(qtr,'Q',1)*3 month - interval 1 day
https://dbfiddle.uk/?rdbms=mysql_5.5&fiddle=a0a4a86900d9d6537418602ae6153a66