描述:CAST() 将值转换为特定类型 用法CAST(val as type)
type允许的值
type | 说明 | 实例 |
---|---|---|
CHAR[(N )] [charset_info ] | 生成具有VARCHAR数据类型的字符串。没有N的话默认为val的长度。反之,如果当val的长度大于N 则从头截取到N 如果没有* charset_info *子句, CHAR 则生成具有默认字符集的字符串。要明确指定字符集, *charset_info *允许使用以下值:CHARACTER SET charset_name :生成具有给定字符集的字符串。 ASCII : 的简写 CHARACTER SET latin1 。 UNICODE : 的简写 CHARACTER SET ucs2 。 | select CAST(12312321 as char(2)),CAST('12312321' as char(2)) -> 12 12 |
DATE | 产生一个DATE值 type 为 date 时 我们输入日期格式的字符串或数字的话可以帮我们转换为DATE 注意 输入数字时不会根据时间戳来进行转换 输入6位数值或字符串的话会这样转换 yyMMdd 这里的yy 会这样转换 00 - 69 ==> 2000 - 2069 70 - 99 ==> 1970 - 1999 ,也可以使用yyyyMMdd这种格式 或者日期字符串 | select CAST(20221212 as DATE),CAST('221212' as DATE) -> 2022-12-12 2022-12-12 |
DATETIME[(M )] | 产生一个DATETIME值,如果指定M 值,则他指定的是微秒的精度。注意同上 | select CAST(20221212 as DATETIME),CAST('221212' as DATETIME) -> 2022-12-12 00:00:00 2022-12-12 00:00:00 |
DOUBLE | 产生一个DOUBLE 结果。在 MySQL 8.0.17 中添加。 | select CAST(1 as DOUBLE),CAST('81' as DOUBLE) -> 1 81 |
FLOAT[(p )] | 如果未指定精度*p *,则生成 type 的结果 FLOAT 。如果 *p *提供且 0 <= < p <= 24,则结果的类型为FLOAT . 如果 25 <= p <= 53,则结果的类型为DOUBLE 。如果 p < 0 或 p > 53,则返回错误。在 MySQL 8.0.17 中添加。-> 我直接使用FLOAT(1)的时候会报语法错误,具体原有还不太清楚 | select CAST(1 as FLOAT),CAST('81' as FLOAT) -> 1 81 |
JSON | 产生一个JSON值 | 待完善 |
TIME[(M )] | 产生一个[TIME ]值。如果给出可选*M *值,则它指定小数秒精度。-> 转换的格式为 ssmmHH | select CAST(2212 as TIME),CAST('221212' as TIME) ->00:22:12 22:12:12 |
SIGNED [INT|INTEGER] | 产生一个带符号的BIGINT值。 | |
UNSIGNED [INT INTEGER] | 产生一个无符号的BIGINT值。 | |
*DECIMAL[M [,N ]] | 产生一个十进制的数值,可以是小数M 为转换后的最大长度 如果VAl的长度超过M 则得到的结果为达不到预期。M 为转换后的整体长度不包含符号,但包含小数点后的数。 N 默认是为0的,不产生小数。指定则会产生N 小数如VAL的小数精度不够由0来补充 | select CAST(1000 as decimal),CAST(1000 as decimal(2)),CAST('1000.11' as decimal(6,2)),CAST('1000.11' as decimal(5,2)) ->1000 99 1000.11 999.99 |
注意事项
注意: CAST 会自左向右的进行转换 如果遇到问题则会终止 并返回遇到问题前转换的结果
如:
select CAST('8111.(1.12313' as DOUBLE),CAST('81(11.1.12313' as DOUBLE)
结果为:8111 81