• MySQL不容忽视SQL_MODE的设置


    CREATE DATABASE  db_test;
    
    CREATE TABLE `tb1` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
      `rank` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排名',
      `add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '当前时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO tb1(rank, type, add_time) VALUES(19, 1, '2015-03-01');
    INSERT INTO tb1(rank, type, add_time) VALUES(10, 1, '2015-04-01');
    INSERT INTO tb1(rank, type, add_time) VALUES(12, 1, '2015-05-01');
    
    SELECT A.add_time, A.rank, B.add_time, B.rank, (B.rank - A.rank) AS diff
    FROM tb1 A LEFT JOIN tb1 B ON A.type = B.type
    WHERE A.add_time='2015-03-01' AND B.add_time = '2015-04-01';
    
    #报错消息
    #[Err] 1690 - BIGINT UNSIGNED value is out of range in '(`db_test`.`b`.`rank` - `db_test`.`a`.`rank`)'
    
    #解决方式:
    SET sql_mode='NO_UNSIGNED_SUBTRACTION';
    SELECT A.add_time, A.rank, B.add_time, B.rank, (B.rank - A.rank) AS diff
    FROM tb1 A LEFT JOIN tb1 B ON A.type = B.type
    WHERE A.add_time='2015-03-01' AND B.add_time = '2015-04-01';

      #这样diff的值可以使负数了,具体sql_mode的用法请参考
      http://tech.it168.com/a2012/0822/1388/000001388401.shtml

  • 相关阅读:
    NOIP2002字串变换[BFS]
    NOIP2000单词接龙[DFS]
    NOIP2003传染病控制[按层DFS]
    NOIP1999邮票面值设计[搜索|DP]
    USACO1.1Broken Necklace[环状DP作死]
    洛谷P1120小木棍[DFS]
    NOIP2000进制转换
    Miller-Rabin素数快速检测
    【数论算法理论与实现】
    洛谷P1141 01迷宫
  • 原文地址:https://www.cnblogs.com/lovekingly/p/4387253.html
Copyright © 2020-2023  润新知