2016-06-18 2 views
0

Ce calcul select cast('2016-06-01 00:00:00' as datetime)-cast('2016-05-31 00:00:00' as datetime) a pour résultat 70 000 000 dans mySQL.Étrange résultat lors du calcul avec des dates mysql

Je suis conscient que je ne devrais pas utiliser cette construction, mais je suis curieux de savoir ce que le 70000000 est?

+0

Il y a 86 '400 millisecondes 000' dans la période de temps que vous soustraites. Je n'ai aucune idée d'où viennent les 70 millions. –

Répondre

2

Premièrement, ce n'est pas ainsi que les dates ou les dates-heures sont soustraites. On utilise datediff et timediff pour cela. Je dis juste. Donc, voir MySQL Date and Time Functions.

Mais regardant

select cast('2016-06-01 00:00:00' as datetime)-cast('2016-05-31 00:00:00' as datetime); 
select cast('2016-06-01 00:00:00' as datetime)-cast('2016-05-30 00:00:00' as datetime); 
select cast('2016-06-01 00:00:00' as datetime)-cast('2016-06-02 00:00:00' as datetime); 

-1000000

select cast('2016-06-01 00:00:00' as datetime)-cast('123' as char(3)); 

20160600999877;

On peut voir un motif d'eux étant traités comme bigints. Alors

select 20160601000000 - 20160531000000; 
select 20160601000000 - 20160530000000; 

Alors que cela semble être la raison.

+0

bizarre, mais vrai. –

+0

Oh ... 20160601-20160521 = 70 .... Je vois – jms

1

Comme @Drew indique, lors de l'exécution de soustraction sont traités comme BIGINT:

$ mysql --column-type-info 

mysql> SELECT 
    -> `der`.`DATE_1`, 
    -> `der`.`DATE_2`, 
    -> `der`.`DATE_1` - `der`.`DATE_2` DIFF 
    -> FROM (SELECT CAST('2016-06-01 00:00:00' AS DATETIME) `DATE_1`, 
    ->    CAST('2016-05-31 00:00:00' AS DATETIME) `DATE_2`) `der`; 
Field 1: `DATE_1` 
Catalog: `def` 
Database: `` 
Table:  `der` 
Org_table: `` 
Type:  DATETIME 
Collation: binary (63) 
Length:  19 
Max_length: 19 
Decimals: 0 
Flags:  BINARY 

Field 2: `DATE_2` 
Catalog: `def` 
Database: `` 
Table:  `der` 
Org_table: `` 
Type:  DATETIME 
Collation: binary (63) 
Length:  19 
Max_length: 19 
Decimals: 0 
Flags:  BINARY 

Field 3: `DIFF` 
Catalog: `def` 
Database: `` 
Table:  `` 
Org_table: `` 
Type:  LONGLONG 
Collation: binary (63) 
Length:  16 
Max_length: 8 
Decimals: 0 
Flags:  BINARY NUM 

-- 20160601000000  20160531000000 
+---------------------+---------------------+----------+ 
| DATE_1    | DATE_2    | DIFF  | 
+---------------------+---------------------+----------+ 
| 2016-06-01 00:00:00 | 2016-05-31 00:00:00 | 70000000 | 
+---------------------+---------------------+----------+ 
1 row in set (0,00 sec) 
+0

Ah, une réponse beaucoup plus fine. Bon travail. – Drew