2016-06-18 7 views
0

この計算は select cast('2016-06-01 00:00:00' as datetime)-cast('2016-05-31 00:00:00' as datetime) という結果になります。mysql日付で計算すると奇妙な結果が返される

私はその命令を使用すべきではないことを知っていますが、70000000は何か不思議です。

+0

'86 400 000ミリ秒を使用すると、減算期間です。私は70万人がどこから来ているのか分かりません。 –

答えて

2

まず、日付または日付時刻を差し引く方法ではありません。 1つはdatedifftimediffです。ただ言って。したがって、MySQL Date and Time Functionsを参照してください。

しかし

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

7000万

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

7100万

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;

bigintsとして扱われるパターンを見ることができます。だから、

select 20160601000000 - 20160531000000; 

7000万

select 20160601000000 - 20160530000000; 

7100万

だから理由であると思われます。減算を行う場合@Drewとして

+0

奇妙ですが、本当です。 –

+0

ああ... 20160601-20160521 = 70 ....私は参照してください – jms

1

は、示し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

ああ、はるかに細かい答え。よくやった。 – Drew

関連する問題