J'ai suivi des données ci-dessus des données ci-dessus est une colonne code> DateTime > dans une table maintenant J'ai besoin d'écrire la requête pour accomplir après P> 1: changez l'année de 2015 à 2019 et tout reste tout devrait rester comme il est P> Voici comment j'ai écrit la requête Build code> p>
mysql> UPDATE buildinfo SET datetime = '2019%' where datetime = (select a.datetime from buildinfo as a where datetime LIKE '2015%');
ERROR 1093 (HY000): You can't specify target table 'buildinfo' for update in FROM clause
mysql>
6 Réponses :
Les valeurs DateTime ne sont pas toujours une chaîne et vous pourriez trouver dans MySQL-8.0, ils ne fonctionnent pas. Heureusement, il y a une quantité riche de date et heure Fonctions .
SO: P>
UPDATE buildinfo SET datetime=DATE_ADD(datetime, INTERVAL 4 YEAR) WHERE datetime BETWEEN '2015-01-01 00:00:00' AND '2015-12-31 23:59:59'
Eh bien, vous peut i>. Notez également que où datetime entre '2015-01-01 00:00:00' et '2015-12-31 23:59:59' code> prend plus de temps à taper, mais est plus rapide à exécuter ( sur une table indexée)
Vous êtes définitivement peut i> utiliser des fonctions de correspondance de chaîne
Vous aviez l'habitude de pouvoir utiliser des fonctions de chaîne, Fiddle , semblait s'arrêter dans mysql8 .0.x Bien que <= 5.7 et Mariah et Mariadb puisse toujours le faire.
Ce qui a du sens, car DateTime n'est pas un fichier de données de char ou de texte Varcharner où un comme code> devrait fonctionner. Je me demande si
remplacer () code> La réponse acceptée fonctionnera toujours dans MySQL 8
"Ce qui a du sens, car DateTime n'est pas un fichier de données de Varcharner ni de type de type texte dans lequel une personne semblable devrait fonctionner. Je me demande si remplacer () la réponse acceptée fonctionnera toujours dans MySQL 8" i> doit aimer l'incohérence dans Mysql .. dbfiddle.uk/...
Remplacer réellement fonctionne. Yeh, cohérence et compatibilité, je dois l'aimer.
Peut-être une question de quelques mises à jour avant les fonctions de chaîne comme remplacer () code> arrêtez également de fonctionner sur ce
DateTime code> DataType qui sait?
Veuillez essayer d'utiliser Date_Format avec la requête de mise à jour
UPDATE buildinfo SET `datetime` = DATE_FORMAT(`datetime`,'2019-%m-%d %T') WHERE YEAR(`datetime`) = '2015';
Une alternative à Danblacks Répondre, à l'aide des fonctions de correspondance de chaîne:
UPDATE build SET `datetime` = CONCAT('2019', RIGHT(`datetime`, 15)) WHERE LEFT(`datetime`, 4) = '2015'
Avoir des difficultés à obtenir cela à Travail , choisissez une version.
Vous avez raison, j'aurais dû lancer le DateTime code> d'abord, mais je supprimerai la fonction
comme code> et utilisez
gauche code>
Peut-être qu'il est préférable d'éviter les fonctions de chaîne sur daTétime code>. Comme indiqué par @danblack
comme code> stopt fonctionnant sur
DateTime code> DataType dans mysql 8, peut-être un Matière de quelques mises à jour avant les fonctions de chaîne telles que
Droite () CODE> et 'GAUCHE ()' ASSAIRE AUSSI TRAVAILLER. Qui sait?
Peut-être ... je serais d'accord pour dire que ce n'est certainement pas la meilleure façon de le faire - cependant, je ne suis pas un fan de l'idée "Les développeurs i> peuvent b> Décapez une fonctionnalité, nous devrions donc cesser d'utiliser. » I> Une fois la dépréciation confirmée, bien sûr. Mais jusque-là, c'est complètement valable, peut-être juste une mauvaise pratique?
Aussi + code> est SQL Server Concat dans MySQL, vous devez utiliser
concat () code> Je viens de remarquer. "Cependant, je ne suis pas fan de l'idée" Les développeurs peuvent se désactiver une fonctionnalité, nous devrions donc arrêter de l'utiliser. " I> Bien qu'il a été défini dans les normes ANSI / ISO SQL comment les fonctions de chaîne devraient fonctionner et sur lesquelles de sorte que ce n'est pas vraiment une dépréciation qu'elle n'a aborge que Démarrer .. MEME EXEMPLE DU MYSQL Autorisé les colonnes non agrégées dans le Select qui ne sont pas dans le groupe par le passé, il n'est pas valide avec les normes ANSI / ISO SQL à l'esprit, mais aux coûts que vous avez joué à la roulette russe avec vos bagriolages.
@Raymondnijland +1. Je n'avais pas vérifié les normes SQL sur les fonctions de cordes, mais que je me suis déjà fait, je suis enclin à être d'accord avec vous.
UPDATE buildinfo set datetime = replace(datetime, '2015', '2019') where datetime LIKE '2015%';
Peut-être qu'il est préférable d'éviter les fonctions de chaîne sur daTétime code>. Comme indiqué par @danblack
comme code> stopt fonctionnant sur
DateTime code> DataType dans mysql 8, peut-être un Matière de quelques mises à jour avant les fonctions de chaîne telles que
Remplacer () Code> Arrêtez également de fonctionner. Qui sait?
Je reçois la clause omission de 5,7 SO 5.6 et Mariahb sont des options de travail seul. Peut être effectué dans un ensemble de mode SQL, mais cela ne fait que travailler avec des hacks.
Si la mise à jour
UPDATE buildinfo SET buildinfo.datetime = buildinfo.datetime + INTERVAL 4 YEAR WHERE YEAR(buildinfo.datetime) = 2015