日期函数

获取、提取日期

#获取当前时间
current date
current time
current timestamp
#提取日期
YEAR (current timestamp)
MONTH (current timestamp)
DAY (current timestamp)
HOUR (current timestamp)
MINUTE (current timestamp)
SECOND (current timestamp)
MICROSECOND (current timestamp)
#分别提取日期、时间
DATE (current timestamp)
TIME (current timestamp)
#要使当前时间或当前时间戳记调整到GMT/CUT,则把当前的时间或时间戳记减去当前时区寄存器: 
 current time -current timezone;  
 current timestamp -current timezone;  
#其他不常用的
QUARTER(current timestamp) #季度
DAYOFYEAR(current timestamp) #
DAYOFWEEK(current timestamp) # 这个日期周的第几天,1-7
DAYOFWEEK_ISO(current timestamp) #这个日期周的第几天,1-7
DAYNAME(current timestamp) #星期几
MONTHNAMEE(current timestamp) #月份名
MIDNIGHT_SECONDS(current timestamp)#返回午夜和参数指定的时间值之间的秒数,用范围再 0 到 86400 之间的整数值表示

日期计算

  1. 直接计算
current date + 1 YEAR
current date + 3 YEAR + 2 MONTHS + 15 DAYS
current time + 5 HOURS - 3 MINUTES + 10 SECONDS
# YEAR-年,MONTHS-月,DAYS-日,MINUTES-分,SECONDS-秒,
  1. 使用函数
#TIMESTAMPDIFF(n,char(时间1-时间2))
SELECT TIMESTAMPDIFF(n,char(current timestamp - CREATETIME));
# current timestamp 当前时间戳
#n:结果的时间单位
1 = 秒的小数部分
2 = 秒
4 = 分
8 = 时
16 = 天 # 当计算日期之间的天数时,应该使用days函数
32 = 周
64 = 月
128 = 季度
256 = 年
#days(时间字符串) 提取天数,
SELECT (days('2022-05-01') - days('2022-03-01')) AS diffDays;

注意:

当时间相差不大时使用timestampdiff即可解决问题;当出现跨月且跨度超过一个月时timestampdiff函数视每个月为30天计算,就会出现日期计算误差,但days函数不受大小月、跨月和平年闰年的影响;建议使用days函数。

日期和char转换

#日期转char
char(current date)
char(current time)
char(current date + 12 hours)
to_char(current date,'yyyymmdd') -- 日期转换为20170606格式
to_char(current timestamp,'yyyymmddhh24miss') -- 24小时制
to_char(current timestamp,'yyyymmddhhmiss') -- 12小时制
substr(cast(current time as varchar(20)),1,2)||
    substr(cast(current time as varchar(20)),4,2)||
    substr(cast(current time as varchar(20)),7,2)
#char转日期
TIMESTAMP ('2002-10-20-12.00.00.000000')
TIMESTAMP ('2002-10-20 12:00:00')
DATE ('2002-10-20')
DATE ('10/20/2002')
TIME ('12:00:00')
TIME ('12.00.00')
to_date('20170809','yyyy-mm-dd')
cast('18:28:26' as time)
cast('20220601082826' as timestamp)

字符串函数

  • VALUE函数
VALUE(EXPRESSION1,EXPRESSION2) 
# VALUE函数是用返回一个非空的值,当其第一个参数非空,直接返回该参数的值,如果第一个参数为空,则返回第二个参数的值。
  • COALESCE函数
COALESCE(ARG1,ARG2...)

COALESCE返回参数集中第一个非null参数。用法类似于VALUE函数。

  • LENGTH函数
LENGTH(ARG) #返回参数的长度。
  • LCASE、LOWER函数
LCASE()、LOWER() #返回定长、变长字符串的小写形式。
  • UCASE、UPPER函数
UCASE()、UPPER() #返回定长、变长字符串的大写形式。
  • LTRIM、RTRIM函数
LTRIM()、RTRIM() #从CHAR、VARCHAR、GRAPHIC或者VARGRAPHIC中去掉左侧或右侧的空格。

LTRIM、RTRIM函数从CHAR、VARCHAR、GRAPHIC或者VARGRAPHIC中去掉左侧或右侧的空格。

  • LEFT、RIGHT函数
LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH) 
#返回ARG最左边、右边的LENGTH个字符串,ARG可以是CHAR或BINARY STRING。
  • CONCAT函数
CONCAT(ARG1,ARG2) #CONCAT函数返回两个字符串的连接。
  • INSERT函数
INSERT(ARG1,POS,SIZE,ARG2) 
#返回一个字符串,将ARG1从POS处删除SIZE个字符,将ARG2插入该位置。
  • LOCATE函数
LOCATE(ARG1,ARG2,<POS>) 
#在ARG2中查找ARG1第一次出现的位置,如果指定POS,则从ARG2的POS处开始查找ARG1第一次出现的位置。
  • POSSTR函数
POSSTR(EXP1,EXP2) # 返回EXP2在EXP1中的位置。
  • REPEAT函数
REPEAT(ARG1,NUM_TIMES) # 返回ARG1被重复NUM_TIMES次的字符串。
  • REPLACE函数
REPLACE(EXP1,EXP2,EXP3) #用EXP3代替EXP1中所有的EXP2。
  • SPACE函数
SPACE(SIZE) #SPACE函数返回一个包含SIZE个空格的字符串。
  • SUBSTR函数
SUBSTR(ARG1,POS,<LENGTH>) 
#返回ARG1中POS位置开始的LENGTH个字符,如果没有指定LENGTH,则返回剩余的字符。

类型转换

转换字符串类型
  • CAST表达式用来转换类型使用
CAST( CURRENT TIME AS CHAR(8) ) #转换为字符串类型
  • CHAR函数
CHAR(ARG) #返回日期时间型、字符串、整数、十进制或双精度浮点数的字符串表示。
  • CHR函数
CHR(ARG) #由参数指定的ASCII码的字符,参数可以是INTEGER或SMALLINT。
  • VARCHAR函数
VARCHAR(ARG,LENGTH) #返回字符串、日期型、图形串的可变长度的字符串表示。
-- 50为截取长度,如果name字符串的长度大于50,则返回“SQL0445W 值已被截断。SQLSTATE=01004”。 
SELECT VARCHAR(NAME,50) FROM TEST
  • DIGITS函数
DIGITS() #SMALLINT、INTEGER、BIGIT或者DECIMAL参数的字符串值。
转换为数字类型:
  • DOUBLE、FLOAT函数
DOUBLE()、FLOAT() #如果参数是一个数字表达式,返回与其对应的浮点数,否则返回错误代码。
  • INT函数
INT() #整型常量中的数字、字符串或者日期、时间的整数表示。
  • BIGINT函数
BIGINT() #返回整型常量中的数字、字符串或者时间戳的64位长整数表示。
  • SMALLINT函数
SMALLINT() #返回整型常量中的数字、字符串短整数表示。
  • REAL函数
REAL() #返回一个数值的单精度浮点数表示。
  • DEC[IMAL]函数
DEC[IMAL]()
#返回一个数值、DECIMAL的字符串、INTEGER的字符串、FLOAT-POINT的字符串、日期、时间或时间戳的DECIMAL数值。
  • HEX函数
HEX() #返回一个字符串的值的16进制表示
  • FLOOR函数
FLOOR() # FLOOR函数小于或等于参数的最大整数。