美文网首页
210930:SQL中的cast()函数-git pull遇到错

210930:SQL中的cast()函数-git pull遇到错

作者: 弹钢琴的崽崽 | 来源:发表于2021-09-30 11:54 被阅读0次

    一. SQL中的cast()函数

    CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。

    1. 语法:

    CAST (expression AS data_type)

    参数说明:
      expression:任何有效的SQServer表达式。
      AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
      data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。

    用CAST函数进行数据类型转换时,在下列情况下能够被接受:
      (1)两个表达式的数据类型完全相同。
      (2)两个表达式可隐性转换。
      (3)必须显式转换数据类型。
      如果试图进行不可能的转换(例如,将含有字母的 char 表达式转换为 int 类型),SQServer 将显示一条错误信息。
      如果转换时没有指定数据类型的长度,则SQServer自动提供长度为30。

    2. 注意事项:

    (1)、CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。以下例子用于将文本字符串'12'转换为整型:

    SELECT CAST('12' AS int)
    

    (2)、返回值是整型值12。如果试图将一个代表小数的字符串转换为整型值,又会出现什么情况呢?

    SELECT CAST('12.5' AS int)
    

    (3)、CAST()函数和CONVERT()函数都不能执行四舍五入或截断操作。由于12.5不能用int数据类型来表示,所以对这个函数调用将产生一个错误:

    Server: Msg 245, Level 16, State 1, Line 1
    Syntax error converting the varchar value
          '12.5' to a column of data type int.
    

    (4)、要返回一个合法的数值,就必须使用能处理这个值的数据类型。对于这个例子,存在多个可用的数据类型。如果通过CAST()函数将这个值转换为decimal类型,需要首先定义decimal值的精度与小数位数。在本例中,精度与小数位数分别为9 与2。精度是总的数字位数,包括小数点左边和右边位数的总和。而小数位数是小数点右边的位数。这表示本例能够支持的最大的整数值是9999999,而最小的小数是0.01。

    SELECT CAST('12.5' AS decimal(9,2))
    

    decimal数据类型在结果网格中将显示有效小数位: 12.50

    (5)、精度和小数位数的默认值分别是18与0。如果在decimal类型中不提供这两个值,SQL Server将截断数字的小数部分,而不会产生错误。

    SELECT CAST('12.5' AS decimal)
    

    结果是一个整数值:12

    1. 实例1:

    SELECT
        t1.normal,
        t1.testSum,
        CAST ( ( t1.normal * 1.0 / t1.testSum * 1.0 ) * 100 AS DECIMAL ( 9, 1 ) ) || '%' 
    FROM
        (
            SELECT COUNT
            ( 1 ) testSum,
            ( SELECT "count" ( 1 ) FROM health_patient_device_result hpdr WHERE is_normal = '2' AND hpdr.create_date :: DATE >= to_date( '2021-08-30 10:33:50', 'YYYY-MM-DD HH24:mi:ss' ) ) normal 
            FROM
            health_patient_device_result hpdr 
            WHERE
            hpdr.patient_device_code = '2c42b699-993b-4189-a1d9-36f6f3e0e92a' 
            AND hpdr.create_date :: DATE >= to_date( '2021-08-30 10:33:50', 'YYYY-MM-DD HH24:mi:ss' ) 
        ) t1;
    

    2. 示例2:

    select * from vrv_paw_genuineManagementStatic where softId=8 ORDER BY cast(version AS decimal(9,2)) desc limit 0,1
    
    select max(CAST(version AS DECIMAL(9,2))) from vrv_paw_genuineManagementStatic where softId=8
    

    3. 总结:

    cast()主要用于类型转换;在sql中转换用于比较大小排序比较多;对于小数,注意使用cast(n as decimal(9,2))。

    二. git pull遇到错误

    error: Your local changes to the following files would be overwritten by merge:
    

    意思是我台式机上新修改的代码的文件,将会被git服务器上的代码覆盖;我当然不想刚刚写的代码被覆盖掉,看了git的手册,发现可以这样解决:

    方法1:如果你想保留刚才本地修改的代码,并把git服务器上的代码pull到本地(本地刚才修改的代码将会被暂时封存起来)

    git stash
    git pull origin master
    git stash pop
    

    如此一来,服务器上的代码更新到了本地,而且你本地修改的代码也没有被覆盖,之后使用add,commit,push 命令即可更新本地代码到服务器了。

    方法2、如果你想完全地覆盖本地的代码,只保留服务器端代码,则直接回退到上一个版本,再进行pull:

    git reset --hard
    git pull origin master
    

    注:其中origin master表示git的主分支。

    三. Java对时间处理的常用

    1. 比较两个时间的大小

    /**
         * 比较两个时间 时分秒 大小
         * @param s1
         * @param s2
         * @return
         */
    public static boolean compTime(String s1,String s2){
        Date date1 = DateUtils.stringToDate(s1, DateUtils.DATE_TIME_PATTERN);
        Date date2 = DateUtils.stringToDate(s2, DateUtils.DATE_TIME_PATTERN);
        if (date1.getTime()>date2.getTime()){
            return true;
        }else {
            return false;
        }
    }
    

    2. 判断时间是否处于某个时间段内

    /**MaNongXF
         * 判断时间是否处于某个时间段内
         *
         * @param time 需要比较的时间
         * @param from 起始时间
         * @param to 结束时间
         * @return
         */
    public static boolean belongCalendar(String time, String from, String to) {
        Calendar date = Calendar.getInstance();
        date.setTime(DateUtils.stringToDate(time,DateUtils.DATE_TIME_PATTERN));
        Calendar after = Calendar.getInstance();
        after.setTime(DateUtils.stringToDate(from,DateUtils.DATE_TIME_PATTERN));
        Calendar before = Calendar.getInstance();
        before.setTime(DateUtils.stringToDate(to,DateUtils.DATE_TIME_PATTERN));
        if (date.after(after) && date.before(before)) {
            return true;
        } else {
            return false;
        }
    }
    

    3. 给日期的+1天

    /**
         * 给日期的日+1天
         * @param dateStr
         * @return
         */
    private String getNextDay(String dateStr) {
        Date date = DateUtils.stringToDate(dateStr, DateUtils.DATE_TIME_PATTERN);
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(date);
        rightNow.add(Calendar.DAY_OF_YEAR, 1);
        return DateUtils.dateToString(rightNow.getTime(), DateUtils.DATE_TIME_PATTERN);
    }
    

    4. 获取过去第几天的日期

    /**
         * 给日期的日+1天
         * @param dateStr
         * @return
         */
    private String getNextDay(String dateStr) {
        Date date = DateUtils.stringToDate(dateStr, DateUtils.DATE_TIME_PATTERN);
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(date);
        rightNow.add(Calendar.DAY_OF_YEAR, 1);
        return DateUtils.dateToString(rightNow.getTime(), DateUtils.DATE_TIME_PATTERN);
    }
    

    四. 数字格式异常: For input string: "0.5"

    原因:

    Integer.parseInt("12.1");

    12.1为浮点型,需要用Double.parseDouble("12.1")转换

    数字转换异常:

    //字符串转换成int类型,因为是浮点型的问题,出现转换错误:
    System.out.println(Integer.parseInt("1.5"));
    //此为修改后的,1无论是整型还是浮点型都可以通过
    System.out.println(Double.parseDouble("1.5"));
    

    五. BigDecimal判断大小

    非整型数,运算由于精度问题,可能会有误差,建议使用BigDecimal类型!

    double a = 0.001;  
    double b = 0.0011;  
    BigDecimal data1 = new BigDecimal(a);  
    BigDecimal data2 = new BigDecimal(b);
    data1.compareTo(data2)   
    public int compareTo([BigDecimal]
    

    将此 BigDecimal 与指定的BigDecimal 比较。根据此方法,值相等但具有不同标度的两个BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。相对六个 boolean 比较运算符 (<, ==, >, >=, !=, <=) 中每一个运算符的各个方法,优先提供此方法。建议使用以下语句执行上述比较:(x.compareTo(y) <op> 0),其中 <op> 是六个比较运算符之一。

    **指定者:

    接口 Comparable<BigDecimal> 中的 compareTo

    参数:

    val - 将此 BigDecimal 与之比较的BigDecimal。

    返回:当此 BigDecimal 在数字上小于、等于或大于val 时,返回 -1、0 或 1。

    六. Java两个整数相除保留两位小数

    第一种

    import java.math.BigDecimal;
    
    /**
     * @author WGR
     * @create 2020/3/17 -- 15:51
     */
    public class DemoTest {
    
        public static void main(String[] args) {
            int a=100;
            int b=33;
            double f1 = new BigDecimal((float)a/b).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            System.out.println(f1);
        }
    }
    

    第二种

    import java.text.DecimalFormat;
    
    /**
     * @author WGR
     * @create 2020/3/17 -- 15:51
     */
    public class DemoTest {
    
        public static void main(String[] args) {
            int a=100;
            int b=33;
            DecimalFormat df = new DecimalFormat("0.00");//格式化小数
            String num = df.format((float)a/b);//返回的是String类型
            System.out.println(num);
        }
    }
    

    相关文章

      网友评论

          本文标题:210930:SQL中的cast()函数-git pull遇到错

          本文链接:https://www.haomeiwen.com/subject/bmkenltx.html