>  기사  >  데이터 베이스  >  시간 및 형식 변환을 구하는 MySQL의 다양한 작업 방법에 대한 자세한 설명

시간 및 형식 변환을 구하는 MySQL의 다양한 작업 방법에 대한 자세한 설명

WBOY
WBOY앞으로
2022-11-07 17:06:322555검색

이 기사는 MySQL 획득 시간 및 다양한 형식 변환 작업 방법에 대한 관련 내용을 주로 소개하는 동영상 튜토리얼에 대한 관련 지식을 제공합니다. 모두에게 도움이 되기를 바랍니다.

시간 및 형식 변환을 구하는 MySQL의 다양한 작업 방법에 대한 자세한 설명

추천 학습: mysql 동영상 튜토리얼

1. SQL 시간 저장 유형

우선 처리 시간의 연산을 마스터해야 하며, 이 데이터 유형이 무엇을 할 수 있는지, 무엇을 할 수 있는지 먼저 이해해야 합니다. 에 사용됩니다. MySQL에서 날짜를 저장하는 데 일반적으로 사용되는 세 가지 데이터 유형은 날짜, 날짜시간 및 타임스탬프입니다.

1.date

달력 날짜(예: '2022-6-17') 형식은 %Y-%m-%d입니다. Python, JAVA 등과 같은 다른 언어에서는 함수 출력 날짜가 yyyy-mm-dd 형식입니다. 이 형식은 매우 정확한 비즈니스 작업에 사용됩니다.

2.datetime

특정 시간 및 날짜 예: '2022-6-17 17:00:22' 형식은 %Y-%m-%d %H:%M:%s입니다. 비즈니스 이 시간 형식은 요구 사항에 따라 초 단위까지의 정확성이 필요할 때 사용할 수 있습니다.

3.time

특정 시간에는 날짜가 포함되지 않습니다. 예: '17:11:00' 형식은 %H:%M:%s입니다. 이 시간 형식은 비즈니스 요구 사항에 일일 시간만 필요한 경우 사용할 수 있습니다.

4.timestamp

는 시간과 날짜를 모두 저장하는 datetime 저장형과 동일합니다. 형식 형식은 %Y-%m-%d %H:%M:%s입니다.

PS.datetime과 timestamp의 차이점

  • TIMESTAMP의 경우 저장 방법이 다릅니다. 클라이언트 시간은 현재 시간대에서 UTC(협정 세계시)로 변환되어 저장됩니다. 쿼리 시 클라이언트의 현재 시간대로 변환하여 반환한다. DATETIME의 경우 변경 사항이 없으며 입력과 출력이 기본적으로 동일합니다. 타임스탬프가 저장할 수 있는 시간 범위도 '1970-01-01 00:00:01.000000'부터 '2038'입니다. -01-19 03:14:07.999999'. datetime이 저장할 수 있는 시간 범위는 '1000-01-01 00:00:00.000000' ~ '9999-12-31 23:59:59.999999'입니다.

  • timestamp에는 자동 초기화 및 업데이트 메커니즘이 있습니다. 즉, 데이터를 삽입할 때 값이 할당되지 않으면 현재 [timestamp]에 해당하는 형식이 자동으로 작성됩니다. 다른 필드를 업데이트하면 자동으로 현재 시간으로 업데이트됩니다

  • 비교 요약

저장 범위 및 저장 방법을 제외하면 타임스탬프와 날짜/시간은 큰 차이가 없습니다. 시간대 간 비즈니스에는 TIMESTAMP가 더 적합합니다
  • timestamp에는 레코드를 업데이트할 때 열 값이 자동으로 업데이트됩니다. 이것이 datatime
  • 5.varchar/bigint

  • 저장 형식이 고정되어 있지 않은 경우가 있습니다. 날짜나 시간, 월 단위로 정확할 수 있습니다. 이러한 유연하고 고정되지 않은 시간을 위해 이러한 형식의 문자열 또는 BIGINT만 사용할 수 있습니다.

이를 위해서는 추출 및 후처리, 계산을 위한 시간 형식으로 변환 또는 원하는 시간을 얻기 위한 논리 연산 수행이 필요합니다.

2. 시간 가져오기

1.now()

현지 특정 날짜 및 시간 가져오기:

select now() as time

2.localtime()

현재와 동일하게 현지 특정 날짜 및 시간 가져오기( ):

select LOCALTIME() as time

3.current_timestamp()

지역별 날짜 및 시간을 가져옵니다. now()와 동일합니다.

select current_timestamp() as time

4.localtimestamp()

지역별 날짜 및 시간 가져오기 , 지금과 동일():

select LOCALTIMESTAMP() as time

以上这4种函数功能都与now()功能一样获取当地具体日期和时间,平常使用一个now()就好了好记。

5.sysdate()

获取当地具体日期和时间,与now()上述几个函数不一样的是,now()在执行该函数之前就已得到了。

select sysdate() as time

以上函数均为获取具体日期和时间。


 6.curdate()

获取当地具体日期:

select curdate() as time

7.current_time()

获取当地具体日期,和curdate()函数功能一样:

select current_date() as time

 以上函数均为获取具体日期。


8. curtime()

获取具体的时间:

select curtime() as time

9.current_time()

获取具体的时间:

select current_time() as

 以上均为获得具体时间的函数。


10. utc_date()

获取UTC时间的日期,因为我们是东八时区要快8个小时,本地时间=UTC时间+8小时。

select utc_date() as time

由于博主现在是晚上九点所以还是6月17日,如果是早上八点之前就是6月16号了。

11.utc_time

获取UTC时间的时间。

select utc_time() as time

12.utc_timestamp()

获取UTC时间的具体日期和时间,在做跨国业务时非常有用。

select utc_timestamp() as time

 以上为获取UTC时间函数。


 13.HOUR(SYSDATE())

获取系统具体小时:

select HOUR(SYSDATE()) as time

 14.MINUTE(SYSDATE())

获取当前系统分钟:

select MINUTE(SYSDATE()) as time

 其他获取year,month,day,second,microsecond都可以通过这种方法获得,这里不再演示。

三、转换时间

如果是用BIGINT或者是字符串varchar存储的时间数据就需要将该列数据转换为时间数据,或者输入一个字符串想要转化为时间格式都需要转换函数,这里详细介绍各种方法解决这种问题:

1.cast() 

基础语法格式:

cast( <数据> as <数据类型> )

可转换的类型有字符串varchar、日期date、时间time、日期时间datetime、浮点型decimal、整数signed、无符号整数unsigned。 

例如我们拿到展示的sql表格:

 该列类型为BIGINT:

 下面直接用cast转换为时间类型:

select cast(time as date) as timefrom value_test

 可见如果有与其他format不对应,只记录到月或者记录到小时时,将不能识别转为时间类型。也可以切换成time或是datetime:

select cast(time as datetime) as timefrom value_test

select cast(time as time) as timefrom value_test

只要是有6个字符的都会被识别为%H:%M:s。

我们可以修改表再看:

 2.convert()

基础语法格式:

convert(<数据>,<数据类型>)
select CONVERT(time ,date) as timefrom value_test

 和上述cast的功能一样,但是cast是强制转换。

所以说如果涉及到记录有多个不同维度的时间数据存储的时候,一般是不用数据库时间类型去做存储的。看cast的例子就可以看出。

3.str_to_date()

str_to_date()函数可以将时间格式的字符串按照所指定的显示格式(format)转换为不同的时间类型。

基础语法格式:

str_to_date(<字符串>,<format格式>')
select str_to_date(time,'%Y%m%d') as timefrom value_test

 这个函数自由性要比cast和convert的自由性高很多,可以自由定义format,但是不会仅显示单个年或日,后面会根据字符的长度补零填充:

select str_to_date(time,'%Y') as timefrom value_test

 这里我们可以更改表格的时间观察是否不满足或者超过标准的时间格式能够被识别:

select str_to_date(time,'%Y%m%d') as timefrom value_test

select str_to_date(time,'%Y%m%d%H%i%S') as timefrom value_test

 可见兼容能力是很强的。

如果是时间都是统一格式记录的直接使用cast或者convert快速转换为时间格式就好了,若是记录的有多个维度的时间应该使用str_to_date函数来转换。

四、时间转换

时间转换一般是把时间类似数据转换为其他类型数据,以上例子cast()函数和convert()函数都可以做到。改变一下位置就好了,由于上述已经提到这里就做两个简单的例子展示:

1.cast()

select cast(create_time as signed) as timefrom value_test

2.convert()

select convert(create_time ,signed) as timefrom value_test

 3.date_format()

其实最主要的还是使用data_format(),date_format()函数可以以不同的格式显示日期/时间数据,可以实现日期转换成字符串。也就是将时间数据读取之后按照format形式转换为字符串输出,当然转换为了字符串我们又可以转为其他的格式。

语法格式:

date_format(<时间类型数据>,<format格式>)

其中format的格式参数可选的有:

格式 描述
%a 星期名缩写
%b 月名缩写
%c 代表几月的数值
%D 带时序后缀的数值-天
%d 天数,数值(00-31)
%e 天数,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
-- --------------------------
%i 分钟,数值(00-59)
%j 转换为天数 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)%T 时间, 24-小时 (hh:mm:ss)
-- -----------------------------
%U 从年初首周开始计算 (00-53)  星期日是一周的第一天
%u 从年初首周开始计算 (00-53)  星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
-- ----------------------------
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 当前周的天数,(0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
-- --------------------------
%Y 年,4 位
%y 年,2 位

自己大家可自己随意组合使用:

select date_format(create_time, '%x%v') as timefrom value_test

但是记住转换输出的都为字符串,转换为其他类型都需要再次转换.

推荐学习:mysql视频教程

위 내용은 시간 및 형식 변환을 구하는 MySQL의 다양한 작업 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제