0
votes

Convertir la date Nvarparar (DD / mm / aaaa) à la période de date (AAAAYY_MM)

J'essaie de convertir cela en un format d'époque, donc par exemple. 2018_05 (yyyy_mm). Actuellement, les données sont au format DD / MM / AAAA.

J'ai essayé un code de distribution mais cela me renvoie yyyy_dd. xxx

Je m'attends / veux voir yyyy_mm.


8 commentaires

Le code semble ok, pouvez-vous partager un exemple? Le problème peut être réservé_field_4 Type de données.


Les fonctions de chaîne / date sont très spécifiques au fournisseur. Il sera très difficile de répondre à cette question sans savoir ce que vous travaillez.


Le résultat du moment est que oneedatafeed_period 2017_01 réservé_field_4 01/02/2017 Mais il devrait renvoyer 2017_02 dans DataFeedPeriod, comme le mois de février est le bon mois.


En outre, quel est le type de données de réservé_field_4 ?


Quel SGBD utilisez-vous? (Cette requête est spécifique au produit.)


Le champ réservé 4 est la date que je veux être convertie en yyyy_mm. Je l'ai renommé dans le nouveau col dans Datafeed car cela décrit plus clairement ce qu'il est.


Désolé ce qui est un SGBD? Je suis un utilisateur SQL assez basique.


SGBD


5 Réponses :


0
votes

Pourquoi ne pas simplement faire des conversations? :

SELECT REPLACE(CONVERT(VARCHAR(7), CONVERT(date, RESERVED_FIELD_4, 101), 102), '.', '_')


2 commentaires

Le champ réservé 4 est Nvarparar, de sorte que l'on ne fonctionne pas


@Robert. . . Ensuite, convertissez-la en la date d'abord.



0
votes

dans SQL-Server Vous pouvez utiliser 'Format' xxx

Essayez ceci: xxx

Ce est une référence


0 commentaires

1
votes

Assumant réservé_field_4 code> est un type de chaîne ( char code> / nchar code> / varchar code> / nvarchars Code>) La solution la plus simple consisterait à utiliser Substring code>: xxx pré>

si c'est une date date code> / Datetime code> / DateTime2 code> Type de données, la solution la plus simple consisterait à utiliser format code>: p> xxx pré>

mais pour de meilleures performances que vous pouvez utiliser Convertissez CODE> et STUB CODE>: P>

SELECT STUFF(CONVERT(char(6), CONVERT(Date, RESERVED_FIELD_4, 103), 112), 5, 0, '_')


2 commentaires

Celui-ci a résolu, merci beaucoup! Cas lorsque Réservé_field_4 est NULL, NULL SINDE SUBSTRING (réservé_field_4, 7, 4) + '_' + SUBSTRING (réservé_field_4, 4, 2) Fin comme [Datafeed_period]


Seul problème avec ce code est que si le champ réservé 4 n'a pas de format de chiffres 00 (2) chiffres, il ne fonctionne pas correctement. Comment puis-je modifier cela au cas où il est 7/2/2018, il est toujours converti en 2018_02?



0
votes

Si vos données sont au format DD / MM / AAAA, il est enregistré comme une chaîne. Par conséquent, les fonctions de chaîne viennent à l'esprit: xxx


1 commentaires

Case lorsque Réservé_field_4 est NULL, NULL SINDE SUBSTRING (réservé_field_4, 7, 4) + '_' + SUBSTRING (réservé_Field_4, 4, 2) Ce code fonctionne bien maintenant, mais pas si la chaîne est d / m / Yyyy, comment puis-je le changer pour que cela ajoute un zéro directeur au cas où il n'est pas au format DD / MM / AAAA?



1
votes

Ceci est le problème courant de stocker une date avec une colonne varchar code>. Vous devinez que le motif stocké est jj / mm / aaaa code> mais le moteur SQL ne le sait pas et suppose actuellement le modèle mm / dd / aaaa code> modèle.

Veuillez vérifier ces résultats: p> xxx pré>

pour afficher ce que vous voulez utiliser correctement les fonctions de chaîne: p> xxx pré>

mais vous devriez réellement Corrigez les valeurs de votre colonne code> Varchar CODE>, jetez-les sur DATE CODE> et stockez les valeurs sous la date DATE CODE>. P>

ALTER TABLE YourTable ADD ReservedField4Date DATE

UPDATE YourTable SET 
    ReservedField4Date = CONVERT(DATE, 
        RIGHT(RESERVED_FIELD_4, 4)                      -- Year
        + '-' + SUBSTRING(RESERVED_FIELD_4, 4, 2)       -- Month
        + '-' + LEFT(RESERVED_FIELD_4, 2))              -- Day

ALTER TABLE YourTable DROP COLUMN RESERVED_FIELD_4

EXEC sp_rename 'SchemaName.YourTable.ReservedField4Date', 'RESERVED_FIELD_4', 'COLUMN'


0 commentaires