Le jeu de données que j'ai hérité a une colonne de date, mais les valeurs de cette colonne sont des entiers du formulaire Je peux convertir l'entier en une chaîne à l'aide de Autres messages suggèrent à l'aide de la commande "date" n'est pas valide dans le contexte où il est utilisé ... " P>
BlockQuote> Pourriez-vous vous conseiller? P> P> 3212007 code> qui devrait être
03-21-2007 code>. Je ne peux pas le récupérer au format de la date.
Cast (myinteger comme Varchar (8)) code> sans difficulté. Ensuite, je peux
CAST CODE> QUE JUSQU'À DATE PAR
CAST (MYINTTEGER AS VARCHAR (8)) CODE> AS DATE) QUI Donne une date. Le problème est que mon entier est formaté comme
'mmddyyyy' code> alors pour
3212007 code>, je reçois
3212-01-07 code>. P> < Pré> xxx pré>
Convert code>, mais tout ce que je reçois sont des erreurs p>
3 Réponses :
Ceci fonctionne (au moins dans MS SQL Server):
SELECT CAST(CONCAT( RIGHT(3212007,4),'-', (3212007 / 1000000), '-', ((3212007 % 1000000) / 10000)) AS date)
L'IBM's DB2 devrait également prendre en charge concat () code> et
droite () code> fonctions afin que cette requête soit aussi ...
DB2 ne veut pas accepter Concat, je reçois l'erreur "Aucune routine autorisée nommée" Concat "de type" Fonction "Les arguments compatibles ont été trouvés." La réponse de Mark Barinstein ci-dessus a fait l'affaire. Merci pour votre contribution.
Essayez ceci: Si vous pouvez avoir un chiffre pendant un mois, il y a une alternative: p> select
date
(
case when substr(char_dt, 1, 2)='00'
then translate('EFGH-0D-0C', char_dt, 'ABCDEFGH')
else translate('EFGH-AB-CD', char_dt, 'ABCDEFGH')
end
) dt, char_dt
from
(
select digits(dec(i, 8)) char_dt
from table(values 3212007, 312007) t(i)
) t;
DT CHAR_DT
---------- --------
2007-03-21 03212007
2007-01-03 00312007
Merci beaucoup! Cela fonctionne comme un charme. Mon prochain ordre des affaires est de savoir qui a foiré les dates en premier lieu!
C'est bon d'entendre ça. Marquez la réponse comme acceptée alors, s'il vous plaît.
Je pense que cela peut bien fonctionner:
create table #temp( date int ) insert into #temp (date) values(3212007), (12032019) select case when len(cast(date as varchar)) = 7 then '0' + left(cast(date as varchar), 1) + '-' + substring(cast(date as varchar), 2,2) + '-' + right(cast(date as varchar), 4) else left(cast(date as varchar), 2) + '-' + substring(cast(date as varchar), 3,2) + '-' + right(cast(date as varchar), 4) end from #temp