zoukankan      html  css  js  c++  java
  • Thinkphp 查询varchar的最大值,MYSQL中FIND_IN_SET()函数的使用

    如果我们直接使用max获取varchar的最大值,很多时候我们获取正确的值。在这之前我们要先了解CAST 和 CONVERT 转化类型的函数,这样我们获取的的最大值就不是“999”。

    1、使用 CAST:
    CAST ( expression AS data_type )

    2、使用 CONVERT:
    CONVERT (data_type[(length)], expression [, style])
    可以看到,convert比CAST多了bai一个style,在转化成日期类型时,因为需要格式要求,cast就不合适了,应该还有其他一些需要转化格式的,比如金钱等等,这个看看帮助就知道。

    其他时候,二者实现的功能都一样。 都是转化类型的函数

    3、 CAST和CONVERT比较

    (1)cast一般更容易使用,convert的优点是可以格式化日期和数值;

    (2)convert一般用于日期和时间值,小数之间转换,cast一般用于小数转数值和字符型;

    (3)converk显示转换,cast是强制转换; 

    4、mysql中获取varchar类型数据的最大值

    -- 获取最大值
    select MAX(CAST(code as SIGNED INTEGER)) from customer;
    select MAX(CAST(code as UNSIGNED INTEGER)) from customer ;
    --
    select max(Convert(code,SIGNED)) FROM from customer
    select max(Convert(code,UNSIGNED)) FROM from customer
    
    -- 也可以转化为小数
    SELECT CAST(2017 as decimal(8,2));    -- 2017.00
    SELECT CONVERT(2017,decimal(8,2)); -- 2017.00

    signed和unsigned用于修饰整数类型。

    signed表示有符号,unsigned表示无符号。对应的有符号数的最大取值要比无符号的小约一半,因为最高一位被用来表示符号。
    默认的int、short、long、long long为有符号数,也就是说,int等价于signed int,short等价于signed short,long等价于signed long,long long等价于signed long long。但是char本身是signed char还是unsigned char,取决于语言的实现(编译器)。

    范围列表如下:
    signed char:[-2^7, 2^7)即[-128, 128);
    unsigned char:[0, 2^8)即[0, 256);

    5、使用Thinkphp6中获取varchar类型数据的最大值

    $code = $model::fieldRaw("max(Convert(code,SIGNED))")->select()->toArray();
    $code = $code[0]['max(Convert(code,SIGNED))'];
    //或者
    $code = $model::fieldRaw("max(CAST(code as SIGNED INTEGER))")->select()->toArray();
    $code = $code[0]['max(CAST(code as SIGNED INTEGER))'];

     6、同理,使用orderRaw进行,也不会受varchar类型影响

    $items = Customer::orderRaw("CAST(code AS UNSIGNED) desc")->select();

    注意:code字段是varchar类型,如果直接使用order,不会得到正确的结果的

    MySql:

    SELECT * FROM customer ORDER BY  CAST(code AS UNSIGNED) desc

    MYSQL中FIND_IN_SET()函数的使用

    这篇博客比较详细,大家自己去看:

    https://www.cnblogs.com/lixinjun8080/p/11246632.html

    我叫简单介绍一下find_in_set

    FIND_IN_SET(str,strlist)

    str 要查询的字符串

    strlist 字段名 参数以”,”分隔 如 (1,2,6,8,10,22)

    查询字段(strlist)中包含(str)的结果,返回结果为null或记录

    假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,' 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,')时将无法正常运行。

    在thinkphp的使用:

    Activity::whereRaw("FIND_IN_SET(1,participants)")->column("id");

    转成MySql:

    SELECT `id` FROM `activity` WHERE  ( FIND_IN_SET(1,participants) )
  • 相关阅读:
    [BZOJ1433][luogu_P2055][ZJOI2009]假期的宿舍
    [BZOJ1280][POJ1149]Emmy卖猪pigs
    [BZOJ1066][luogu_P2472][SCOI2007]蜥蜴
    [nowcoder_Wannafly挑战赛4_F]线路规划
    [SPOJ839]Optimal Marks
    [BZOJ1497][NOI2006]最大获利
    Django_orm脚本
    Function
    Class
    Python核心编程
  • 原文地址:https://www.cnblogs.com/bushui/p/13457379.html
Copyright © 2011-2022 走看看