美文网首页
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