MySQL database study notes (five) ---- MySQL string functions, date and time functions

A common string functions:

  • 1, CHAR_LENGTH get the length (in characters)
  • 2, FORMAT formatting
  • 3, INSERT alternative inserted
  • 4, INSTR obtain location
  • 5, LEFT / RIGHT taken left and right take
  • 6, LENGTH get the length (in bytes)
  • 7, LTRIM / RTRIM / TRIM go to space (left / right / Custom)
  • 8, STRCMP string comparison
  • 9, CONCAT string concatenation
  • 10, SUBSTRING string interception

1, CHAR_LENGTH: obtaining a length (in characters)

CHAR_LENGTH(str)

Explanation: Returns the value of the length of string str, calculated in units of a character (a Chinese character can be considered a)

For example:

If it is the form of the query field length is known, can be written:

2、FORMAT

FORMAT(X,D)

Explanation: The Write Format of digital X '#, ###, ### ##', in a rounded way to keep D decimal places, and returns the result as a string. If the D is 0, the result is returned without a decimal point, or no fractional part.

For example:

3, INSERT: alternative inserted

INSERT (str,pos,len,newstr)

Explanation: Returns the string str, starting from the original position pos str, and replaced with a string for newstr, replacing length len.

If pos exceeds the string length, the original value string is returned. If the length len of the string exceeds the length of the back, from the position pos start to the end of the string to replace.

If any of the four parameters of a parameter is null, the entire function returns a value NULL.

Example: is replaced smyh001 smyh002

4、INSTR:查找子字符串的位置

INSTR(str,substr)

Explanation: Returns the string str in position of the substring substr first appears.

For example:

. 5, the LEFT / RIGHT: string interception

  • Left interception:
LEFT(str,len)

Explanation: Returns the string str, counting from the left, before len characters.

  • Right interception:
RIGHT (str, len)

解释:返回字符串str中,从右边开始算起的,前len个字符。

6、LENGTH:求字符串长度(以字节为单位)

LENGTH(str)

解释:返回值为字符串str的长度,单位为字节。一个多字节字符算作多字节。这意味着对于一个包含五个2字节字符的字符串,LENGTH()的返回值为10,而CHAR_LENGTH()的返回值则为5。

注:

  • GBK  编码中,一个中文字符是2个字节。
  • UTF-8编码中,一个中文字符是3个字节,一个英文字符是2个字节。

7、LTRIM/RTRIM/TRIM 去空格(左/右/自定义):

  • 去掉左边的空格:
LTRIM(str)

解释:返回字符串str,其引导空格字符被删除。

  • 去掉中间的空格:
RTRIM(str)

解释:返回字符串str,其结尾空格字符被删除。

  • 自定义去空格:
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) 

注:大括号和中括号里面的参数为可选项,如果全部都加上的话,默认为参数both。

解释:将原字符串str去掉空格返回。只去开头(leading)的空格,只去结尾(trailng)的空格,或者同时去掉(both)开头和结尾的空格都行。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH。

TRIM([remstr FROM] str)

解释:remstr关键字的作用是去掉指定字符。 即所有包含remstr的前缀和/或后缀将被删除。未指定情况下,即删除空格。

官方文档的举例:

8、STRCMP判断字符串是否相等

STRCMP(expr1,expr2)

解释:判断两个字符串是否相等。若所有的字符串均相同,则返回0;若根据当前分类次序,第一个参数小于第二个,则返回-1;其它情况返回1。功能和比较器类似。

注:字符串的大小是按照ANSI编码来比较的。

举例:

9、CONCAT:字符串拼接

CONCAT(str1,str2,...)

解释:返回结果为连将str1、str2···拼接之后产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。括号里可能有一个或多个参数。 

如果所有参数均为非二进制字符串,则结果为非二进制字符串。如果自变量中含有任意一个二进制字符串,则结果为一个二进制字符串。一个数字参数将自动转化为与之相等的二进制字符串格式。

若要避免这种情况二进制的情况出现,可使用显式类型 cast(str),将二进制的字符串转换为非二进制字符串。例如:SELECT CONCAT(CAST(int_col AS CHAR), char_col)

举例:(navicat编辑器会自动将二进制字符串转换为非二进制字符串)

10、SUBSTRING字符串截取

SUBSTRING(str,pos)
SUBSTRING(str FROM pos)
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len) 

解释:不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。

使用FROM的格式为标准SQL语法。

也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos字符(也就是说,pos为正时,从左边算起;pos为负时,从右边算起)。 

官方文档举例如下:

 

二、常见日期时间函数:

  • 1、DAYOFWEEK、 DAYOFYEAR、DAYOFMONTH
  • 2、WEEKDAY
  • 3、YEAR、QUARTER、MONTH、
  • 4、HOUR、MINUTE、SECOND
  • 5、TO DAYS、FROM DAYS    
  • 6、CURDATE、CURTIME、NOW   获取当前时间

1、DAYOFWEEK、 DAYOFYEAR、DAYOFMONTH

  • 求星期几:(一周中的第几天) 
DAYOFWEEK(date)

解释:返回date(1=周日,2=周一, ...,7=周六)对应的工作日索引。即:date对应的范围是1至7。

  • 求一年中的某天是第几天:(一年中的第几天)
DAYOFYEAR(date)

返回date对应的一年中的天数,范围是从1到366。

  • 求一个月中的某天是第几天:(一个月的第几天)
DAYOFMONTH(date)

返回date对应的该月日期,范围是从1到31。注:DAY(date) 和DAYOFMONTH(date)的含义相同。

举例:

2、WEEKDAY:

  • 求星期几:(一周的第几天)
WEEKDAY(date)

解释:返回date(0 = 周一, 1 = 周二, ... 6 = 周日)对应的工作日索引。即:date对应的范围是0至6。

注:DAYOFWEEK(date)和WEEKDAY(date)的功能相同,唯一的区别在于date对应的取值范围。

3、 YEAR、QUARTER、MONTH

  • 求年份:
YEAR(date)

解释:返回date对应的年份,范围是从1000到9999。

  • 求季度:
QUARTER(date)

解释:返回date对应的一年中的季度值,范围是从1到4。

  • 求月份:(该月是一年当中的第几个月)
MONTH(date) 

解释:返回date 对应的月份,范围是从1到12。

举例:

4、HOUR、MINUTE、SECOND

  • 求小时:
HOUR(time)

解释:返回time 对应的小时数。对于日时值的返回值范围是从0到23 。

  • 求分钟:
MINUTE(time)

解释:返回time对应的分钟数,范围是从0到59。

  • 求秒数:
SECOND(time)

解释:返回time对应的秒数,范围是从0到59。

举例:

5、TO_DAYS、FROM_DAYS

  • 求某日期,一共经历了多少天:(历史长河中)
TO_DAYS(date)

解释:给定一个日期date, 返回一个天数 (从年份0开始的天数 )。

  • 求历史长河中的第某天,的日期:
FROM_DAYS(N)

解释:给定一个天数 N, 返回一个DATE值。

使用FROM_DAYS()处理古老日期时,务必谨慎,他不用于处理阳历出现前的天数(1582)。

6、CURDATE、CURTIME、NOW

  • 求当前的年月日:
CURDATE()

解释:将当前日期按照'YYYY-MM-DD'或YYYYMMDD格式的值返回,具体格式根据函数用在字符串或是数字语境中而定。

举例:

  • 求当前的时分秒:
CURTIME()

解释:将当前时间以'HH:MM:SS'或HHMMSS的格式返回,具体格式根据函数用在字符串或是数字语境中而定。

举例:

  • 求当前的年月日、时分秒:
NOW()

举例:

注:如果now是放在语句当中,要看具体字段的格式要求。比如说,如果是放在date字段中,则只显示年月日;如果是放在datetime字段中,则同时显示年月日和时分秒。

  • 1、CHAR_LENGTH  获取长度(字符为单位)
  • 2、FORMAT  格式化
  • 3、INSERT  替换的方式插入
  • 4、INSTR  获取位置
  • 5、LEFT/RIGHT  取左、取右
  • 6、LENGTH   获取长度(字节为单位)
  • 7、LTRIM/RTRIM/TRIM 去空格(左/右/自定义)
  • 8、STRCMP  字符串比较
  • 9、CONCAT  字符串拼接
  • 10、SUBSTRING  字符串截取

1、CHAR_LENGTH:获取长度(字符为单位)

CHAR_LENGTH(str)

解释:返回值为字符串str的长度,计算的单位为字符(一个中文也算一个字符)

举例:

如果是查询已知表格里的字段长度,可以这样写:

2、FORMAT

FORMAT(X,D)

解释:将数字X的格式写为'#,###,###.##',以四舍五入的方式保留小数点后D位,并将结果以字符串的形式返回。若D为0, 则返回结果不带有小数点,或不含小数部分。

举例:

3、INSERT:替换的方式插入

INSERT (str,pos,len,newstr)

解释:返回字符串str,从原str的pos位置开始,用字符串newstr来替换,替换的长度为len。

如果pos超过字符串长度,则返回值为原始字符串。假如len的长度超过后面字符串的长度,则从位置pos开始替换到字符串的结尾即可。

四个参数中若任何一个参数为的值为null,则整个函数的返回值为NULL。

举例:将smyh001替换为smyh002

4、INSTR:查找子字符串的位置

INSTR(str,substr)

解释:返回字符串str中首次出现子字符串substr的位置。

举例:

5、LEFT/RIGHT:字符串截取

  • 左截取:
LEFT(str,len)

解释:返回字符串str中,从左边开始算起的,前len个字符。

  • 右截取:
RIGHT(str,len)

解释:返回字符串str中,从右边开始算起的,前len个字符。

6、LENGTH:求字符串长度(以字节为单位)

LENGTH(str)

解释:返回值为字符串str的长度,单位为字节。一个多字节字符算作多字节。这意味着对于一个包含五个2字节字符的字符串,LENGTH()的返回值为10,而CHAR_LENGTH()的返回值则为5。

注:

  • GBK  编码中,一个中文字符是2个字节。
  • UTF-8编码中,一个中文字符是3个字节,一个英文字符是2个字节。

7、LTRIM/RTRIM/TRIM 去空格(左/右/自定义):

  • 去掉左边的空格:
LTRIM(str)

解释:返回字符串str,其引导空格字符被删除。

  • 去掉中间的空格:
RTRIM(str)

解释:返回字符串str,其结尾空格字符被删除。

  • 自定义去空格:
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) 

注:大括号和中括号里面的参数为可选项,如果全部都加上的话,默认为参数both。

解释:将原字符串str去掉空格返回。只去开头(leading)的空格,只去结尾(trailng)的空格,或者同时去掉(both)开头和结尾的空格都行。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH。

TRIM([remstr FROM] str)

解释:remstr关键字的作用是去掉指定字符。 即所有包含remstr的前缀和/或后缀将被删除。未指定情况下,即删除空格。

官方文档的举例:

8、STRCMP判断字符串是否相等

STRCMP(expr1,expr2)

解释:判断两个字符串是否相等。若所有的字符串均相同,则返回0;若根据当前分类次序,第一个参数小于第二个,则返回-1;其它情况返回1。功能和比较器类似。

注:字符串的大小是按照ANSI编码来比较的。

举例:

9、CONCAT:字符串拼接

CONCAT(str1,str2,...)

解释:返回结果为连将str1、str2···拼接之后产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。括号里可能有一个或多个参数。 

如果所有参数均为非二进制字符串,则结果为非二进制字符串。如果自变量中含有任意一个二进制字符串,则结果为一个二进制字符串。一个数字参数将自动转化为与之相等的二进制字符串格式。

若要避免这种情况二进制的情况出现,可使用显式类型 cast(str),将二进制的字符串转换为非二进制字符串。例如:SELECT CONCAT(CAST(int_col AS CHAR), char_col)

举例:(navicat编辑器会自动将二进制字符串转换为非二进制字符串)

10、SUBSTRING字符串截取

SUBSTRING(str,pos)
SUBSTRING(str FROM pos)
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len) 

解释:不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。

使用FROM的格式为标准SQL语法。

也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos字符(也就是说,pos为正时,从左边算起;pos为负时,从右边算起)。 

官方文档举例如下:

 

二、常见日期时间函数:

  • 1、DAYOFWEEK、 DAYOFYEAR、DAYOFMONTH
  • 2、WEEKDAY
  • 3、YEAR、QUARTER、MONTH、
  • 4、HOUR、MINUTE、SECOND
  • 5、TO DAYS、FROM DAYS    
  • 6、CURDATE、CURTIME、NOW   获取当前时间

1、DAYOFWEEK、 DAYOFYEAR、DAYOFMONTH

  • 求星期几:(一周中的第几天) 
DAYOFWEEK(date)

解释:返回date(1=周日,2=周一, ...,7=周六)对应的工作日索引。即:date对应的范围是1至7。

  • 求一年中的某天是第几天:(一年中的第几天)
DAYOFYEAR(date)

返回date对应的一年中的天数,范围是从1到366。

  • 求一个月中的某天是第几天:(一个月的第几天)
DAYOFMONTH(date)

返回date对应的该月日期,范围是从1到31。注:DAY(date) 和DAYOFMONTH(date)的含义相同。

举例:

2、WEEKDAY:

  • 求星期几:(一周的第几天)
WEEKDAY(date)

解释:返回date(0 = 周一, 1 = 周二, ... 6 = 周日)对应的工作日索引。即:date对应的范围是0至6。

注:DAYOFWEEK(date)和WEEKDAY(date)的功能相同,唯一的区别在于date对应的取值范围。

3、 YEAR、QUARTER、MONTH

  • 求年份:
YEAR(date)

解释:返回date对应的年份,范围是从1000到9999。

  • 求季度:
QUARTER(date)

解释:返回date对应的一年中的季度值,范围是从1到4。

  • 求月份:(该月是一年当中的第几个月)
MONTH(date) 

解释:返回date 对应的月份,范围是从1到12。

举例:

4、HOUR、MINUTE、SECOND

  • 求小时:
HOUR(time)

解释:返回time 对应的小时数。对于日时值的返回值范围是从0到23 。

  • 求分钟:
MINUTE(time)

解释:返回time对应的分钟数,范围是从0到59。

  • 求秒数:
SECOND(time)

解释:返回time对应的秒数,范围是从0到59。

举例:

5、TO_DAYS、FROM_DAYS

  • 求某日期,一共经历了多少天:(历史长河中)
TO_DAYS(date)

解释:给定一个日期date, 返回一个天数 (从年份0开始的天数 )。

  • 求历史长河中的第某天,的日期:
FROM_DAYS(N)

解释:给定一个天数 N, 返回一个DATE值。

使用FROM_DAYS()处理古老日期时,务必谨慎,他不用于处理阳历出现前的天数(1582)。

6、CURDATE、CURTIME、NOW

  • 求当前的年月日:
CURDATE()

解释:将当前日期按照'YYYY-MM-DD'或YYYYMMDD格式的值返回,具体格式根据函数用在字符串或是数字语境中而定。

举例:

  • 求当前的时分秒:
CURTIME()

解释:将当前时间以'HH:MM:SS'或HHMMSS的格式返回,具体格式根据函数用在字符串或是数字语境中而定。

举例:

  • 求当前的年月日、时分秒:
NOW()

举例:

注:如果now是放在语句当中,要看具体字段的格式要求。比如说,如果是放在date字段中,则只显示年月日;如果是放在datetime字段中,则同时显示年月日和时分秒。

Guess you like

Origin www.cnblogs.com/zyh0430/p/11921335.html