数仓面试|四个在工作后才知道的SQL密技

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数仓面试|四个在工作后才知道的SQL密技相关的知识,希望对你有一定的参考价值。

Date类(日期类)、DateFormat类(对日期类转换为文本)、Calendar类(日历类)--常用类

类Date,表示特定的瞬间,精确到毫秒。

1000毫秒 = 1秒

日期和毫秒可以相互转换

日期-->毫秒:从1970年1月1日00:00:00到当前日期,一共经历了多少毫秒

毫秒-->日期:1天 = 24 x 60 x 60 = 86400秒 = 86400 x 1000 = 86400000毫秒

构造方法:
public Date()//生成当前系统到1970年1月1日00:00:00之间的毫秒数----生成当前系统的时间
public Date(long date)//生成从1970年1月1日00:00:00,过了date参数毫秒的时间对象---生成特定时间,注意date类型为long    

常用成员方法:
public long getTime()//返回自1970年1月1日00:00:00的毫秒数
DateFormat类---对日期进行格式化

java.text public abstract class DateFormat extends Format 是日期/时间格式的子类的抽象父类

作用:格式化(即,日期→文本),解析(文本→日期)

成员方法:
public final String format(Date date)//将日期转化为字符串
public Date parse(String source)//将字符串解析为日期

DateFormat类为一个抽象类,无法创建对象使用,需用到它的实现子类SimpleDateFormat

SimpleDateFormat类extends DateFormat

java.text.SimpleDateFormat extends DateFormat

构造方法:

public SimpleDateFormat(String pattern)
    /*使用给定的模式和默认的默认日期格式来创建SimpleDateFormat 对象
      参数:pattern  传递指定的日期格式
      格式:区分大小写
      y   年
      M   月
      d   日
      H   时
      m   分
      s  秒
      对应的格式,会把格式替换成对应的日期和时间
      "yyyy-MM--dd HH:mm:ss"
      注意:模式中的字母不可更改,但连接符可更改
      "yyyy年MM月dd日 HH时mm分ss秒" 也行
    */

用父类DateFormat 中方法来讲文本和日期之间相互转化

public final String format(Date date)//将日期转化为字符串
public Date parse(String source)//将字符串解析为日期
package commonclass;

import java.text.FieldPosition;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestSimpleDateFormat01 {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
        String format = simpleDateFormat.format(new Date());
        System.out.println(format);

        Date parse = simpleDateFormat.parse("2020年08月08日17时01分53秒");//这儿的source格式必须与“yyyy年MM月dd日HH时mm分ss秒”格式相对应,否则会抛出ParseException
        System.out.println(parse);

    }
}

练习:

package commonclass;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

//计算一个人出生了多少天
/*思路
* 1.计算当前时间的毫秒数
* 2.计算出生时间的毫秒数
* 3.两者相减,再/1000/60/60/24*/
public class PracticeSimpleDateFormat01 {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();//1.当前时间毫秒数
        System.out.println(date.getTime());

        //2.计算出生时间的毫秒数
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入出生年月日,yyyy年MM月dd日HH时mm分ss秒");
        String strDate = scanner.next();

        Date birth = simpleDateFormat.parse(strDate);
        System.out.println(birth.getTime());

        int days = (int) ((date.getTime() - birth.getTime())/1000/60/60/24);
        System.out.println("你从出生到现在共活了"+days+"天");

    }
}
Calendar类---日历类

java.until.Calendar类是一个抽象类,里面提供了许多操作日历字段的方法(如YEAR , MONTH , DAY_OF_MONTH , HOUR )

由于calendar类是一个抽象类,无法直接创建对象

但calendar类里面有一个静态方法,public static Calendar getInstance(),可以直接创建calendar类的子类对象。

Calendar类中常用的成员方法
public int get(int field)//返回给定的日历字段的值
public void set(int field, int value)//设置特定的日历字段值
public final void set(int year, int month, int date)//设置日历的年、月、日
abstract public void add(int field, int amount)//加上或减去指定的时间到指定日历字段,amount可以是正负
public final Date getTime()//将日历对象转换为日期对象
 /*参数:field
 是Calendar类中的静态成员变量
 比如 public final static int YEAR = 1;
     public final static int MONTH = 2;
     public final static int DATE = 5;
     等等等,有好多,可以在Calendar类中查找
 */
 
package commonclass;

import java.util.Calendar;
import java.util.Date;

public class TestCalendar01 {
    public static void main(String[] args) {
        //生成calendar对象
        Calendar c = Calendar.getInstance();

        //设置calendar字段
        c.set(Calendar.YEAR,2000);

        //增加或减少calendar指定字段的值
        c.add(Calendar.MONTH,-1);//西方月份0-11月,东方月份1-12月

        System.out.println(c);//java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2000,MONTH=6,WEEK_OF_YEAR=33,WEEK_OF_MONTH=2,DAY_OF_MONTH=8,DAY_OF_YEAR=221,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=9,HOUR_OF_DAY=21,MINUTE=22,SECOND=45,MILLISECOND=446,ZONE_OFFSET=28800000,DST_OFFSET=0]


        //将日历对象转化为日期对象
        Date date = c.getTime();
        System.out.println(date);//Sat Jul 08 21:22:45 CST 2000
    }
}

以上是关于数仓面试|四个在工作后才知道的SQL密技的主要内容,如果未能解决你的问题,请参考以下文章

面试常用的代码片段

大数据 SQL 题目

企业数据治理实战总结--数仓面试必备

企业数据治理实战总结--数仓面试必备

C# SQLConnection 池

缺少 SQL SERVER 2014 代码片段