3 votes

Le filtrage sur le champ date fonctionne différemment pour SELECT et DELETE

J'ai le code suivant :

CREATE TABLE test_tab (
  create_time datetime(6) NOT NULL,
  PRIMARY KEY (create_time)
);

INSERT INTO test_tab (create_time) VALUES ('2023-04-21 00:17:24.000000000');
COMMIT;

SELECT * FROM test_tab WHERE create_time = '2023-04-21 00:17:24.000000000';
DELETE FROM test_tab WHERE create_time = '2023-04-21 00:17:24.000000000';
COMMIT;
SELECT * FROM test_tab WHERE create_time = '2023-04-21 00:17:24.000000000';

Les deux sélections renvoient une ligne. Des indices sur la raison de ce phénomène ?

mysql --version mysql Ver 15.1 Distrib 10.3.38-MariaDB, pour debian-linux-gnu (x86_64) utilisant readline 5.2

2voto

nbk Points 20703

Le problème est que vous avez plus de 6 microsecondes, vous devez donc d'abord les convertir

pour le select, il le convertit automatiquement, ce que ne fait pas le DELETE.

CREATE TABLE test_tab (
  create_time datetime(6) NOT NULL,
  PRIMARY KEY (create_time)
);

INSERT INTO test_tab (create_time) VALUES ('2023-04-21 00:17:24.000000000');
COMMIT;

SELECT * FROM test_tab WHERE create_time = '2023-04-21 00:17:24.000000000';

heure_de_création

2023-04-21 00:17:24.000000

DELETE FROM test_tab 
  WHERE create_time = STR_TO_DATE('2023-04-21 00:17:24.000000000','%Y-%m-%d %H:%i:%s.%f');

SELECT * FROM test_tab WHERE create_time = '2023-04-21 00:17:24.000000000';

heure_de_création

violon

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X