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. p> Je m'attends / veux voir yyyy_mm. p> p>
5 Réponses :
Pourquoi ne pas simplement faire des conversations? :
SELECT REPLACE(CONVERT(VARCHAR(7), CONVERT(date, RESERVED_FIELD_4, 101), 102), '.', '_')
Le champ réservé 4 est Nvarparar, de sorte que l'on ne fonctionne pas
@Robert. . . Ensuite, convertissez-la en la date code> d'abord.
dans SQL-Server Vous pouvez utiliser 'Format' Essayez ceci: p> Ce est une référence p> p>
Assumant si c'est une date mais pour de meilleures performances que vous pouvez utiliser 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>: date code> / Datetime code> / DateTime2 code> Type de données, la solution la plus simple consisterait à utiliser format code>: p> Convertissez CODE> et STUB CODE>: P> SELECT STUFF(CONVERT(char(6), CONVERT(Date, RESERVED_FIELD_4, 103), 112), 5, 0, '_')
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?
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:
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?
Ceci est le problème courant de stocker une date avec une colonne Veuillez vérifier ces résultats: p> pour afficher ce que vous voulez utiliser correctement les fonctions de chaîne: p> mais vous devriez réellement Corrigez les valeurs de votre colonne code> Varchar CODE>, jetez-les sur 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. 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'
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 code>?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