source

CURRENT_TIMESTamp(밀리초 단위)

gigabyte 2023. 1. 2. 22:39
반응형

CURRENT_TIMESTamp(밀리초 단위)

「」의를 취득하는 ?MySql ★★★★★★★★★★★★★★★★★」PostgreSql(「」의 「」의 「」입니다.

SELECT CURRENT_TIMESTAMP
--> 2012-03-08 20:12:06.032572

다음과 같은 것이 있습니까?

SELECT CURRENT_MILLISEC
--> 1331255526000

다른 이 없다, 라고 것에 없습니다.DATEDIFF era

MySQL(5.6+)의 경우 다음을 수행할 수 있습니다.

SELECT ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000)

다음 중 하나가 반환됩니다(예:

1420998416685 --milliseconds

MySQL에서 Unix 타임스탬프를 초단위로 가져오려면:

select UNIX_TIMESTAMP();

상세: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp

테스트되지 않은 PostgreSQL 단, 이 사이트에 따르면 동작합니다.http://www.raditha.com/postgres/timestamp.php

select round( date_part( 'epoch', now() ) );

mysql에서는 uuid 함수를 사용하여 밀리초를 추출할 수 있습니다.

select conv( 
            concat(
                   substring(uid,16,3), 
                   substring(uid,10,4), 
                   substring(uid,1,8))
                   ,16,10) 
            div 10000 
            - (141427 * 24 * 60 * 60 * 1000) as current_mills
from (select uuid() uid) as alias;

결과:

+---------------+
| current_mills |
+---------------+
| 1410954031133 |
+---------------+

오래된 mysql 버전에서도 사용할 수 있습니다!

다음 페이지에 감사드립니다.http://rpbouman.blogspot.com.es/2014/06/mysql-extracting-timstamp-and-mac.html

MySQL에서 타임스탬프를 사용하는 주된 오해는 MySQL이 기본적으로 부분 없이 타임스탬프를 반환하고 저장한다는 것입니다.

SELECT current_timestamp()  => 2018-01-18 12:05:34

초의 타임스탬프로 변환할 수 있습니다.

SELECT UNIX_TIMESTAMP(current_timestamp()) => 1516272429

부분 부품을 추가하려면:

SELECT current_timestamp(3) => 2018-01-18 12:05:58.983

마이크로초 타임스탬프로 변환할 수 있습니다.

SELECT CAST( 1000*UNIX_TIMESTAMP(current_timestamp(3)) AS UNSIGNED INTEGER) ts => 1516272274786

테이블 보관에는 요령이 거의 없습니다.테이블이 다음과 같이 생성된 경우

    CREATE TABLE `ts_test_table` (
      `id` int(1) NOT NULL,
      `not_fractional_timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

MySQL은 부분적인 부분을 저장하지 않습니다.

    id, not_fractional_timestamp
    1,  2018-01-18 11:35:12

테이블에 부분 부품을 추가하려면 다른 방법으로 테이블을 작성해야 합니다.

    CREATE TABLE `ts_test_table2` (
      `id` int(1) NOT NULL,
      `some_data` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
      `fractional_timestamp` timestamp(3) NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

필요한 결과로 이어집니다.

    id, some_data, fractional_timestamp
    1,  8,         2018-01-18 11:45:40.811

current_timestamp() 함수는 최대 6자리까지 값을 받을 수 있지만 fraction precision 6은 꼬리 부분에 3자리 정수 값으로 이어진다는 것을 알게 되었습니다.

    id, some_data, fractional_timestamp
    1,  2,         2018-01-18 12:01:54.167688
    2,  4,         2018-01-18 12:01:58.893688

즉, MySQL의 실제 사용 가능한 타임스탬프 정밀도는 플랫폼에 따라 달라집니다.

  • Windows의 경우: 3
  • Linux의 경우: 6

Mysql 5.7 이상에서는

select current_timestamp(6)

자세한 것은

https://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html

포스터는 Epoch 이후의 시간이나 S가 아닌 Epoch 이후의 MS 정수값을 요구하고 있습니다.

'우리'를 사용해야 합니다.NOW(3)소수점 3자리까지의 시간(즉, MS 정밀도): 2020-02-13 16:30:18.236

★★★★★★★★★★★★★★★.UNIX_TIMESTAMP(NOW(3))1581611418 이후의 분수 초수를 취득합니다.236

ㅇㅇㅇㅇㅇ.FLOOR(UNIX_TIMESTAMP(NOW(3))*1000)epoc 이후 ms의 경우: 1581611418236을 둥근 정수로 만듭니다.

MySQL 함수로 만들기:

CREATE FUNCTION UNIX_MS() RETURNS BIGINT DETERMINISTIC
BEGIN
    RETURN FLOOR(UNIX_TIMESTAMP(NOW(3))*1000);
END

지금 실행SELECT UNIX_MS();

주의: 이것은 모두 손으로 복사한 것이므로, 실수가 있으면 언제든지 수정해 주세요.

용도:

Select curtime(4);

그러면 밀리초가 걸립니다.

Postgre 타임스탬프 값에서 밀리초를 추출하는 올바른 방법현재 매뉴얼에 따른 SQL은 다음과 같습니다.

SELECT date_part('milliseconds', current_timestamp);

--OR

SELECT EXTRACT(MILLISECONDS FROM current_timestamp);

반품 포함:seconds 필드(분수 부분 포함)에 1000을 곱한 값입니다.여기에는 풀초가 포함됩니다.

MySql에서 현재 시간(밀리초)을 수신하는 가장 쉬운 방법:

SELECT (UNIX_TIMESTAMP(NOW(3)) * 1000)

MySql 5.6 이후

이러한 응답 중 어느 것도 포스트그레어의 문제를 실제로 해결하지 못한다.SQL, 예:

날짜 필드UNIX 타임스탬프 가져오기(밀리초)

저는 같은 문제를 안고 다른 답변을 테스트했지만 만족스러운 결과를 얻지 못했습니다.

마침내, 나는 아주 간단한 방법을 발견했다. 아마도 가장 간단한 방법일 것이다.

SELECT ROUND(EXTRACT (EPOCH FROM <date_column>::timestamp)::float*1000) as unix_tms
FROM <table>

즉, 다음과 같습니다.

  • pgSQL EPOKE(유닉스 타임스탬프)를 타임스탬프 신중성으로 캐스트된 컬럼에서 플로팅 초 단위로 추출합니다(일부 복잡한 쿼리에서 pgSQL은 이 캐스트가 명시적이지 않으면 오류를 발생시킬 수 있습니다).를 참조해 주세요.
  • 그런 다음 플로트로 주조하고 1000을 곱하여 밀리초 단위로 값을 구합니다.
  • 반올림해서 부분만 떨어트리고

포스트그레사용할 수 있는 SQL:

SELECT extract(epoch from now());

MySQL의 경우:

SELECT unix_timestamp(now());

다음은 MariaDB 및 MySQL >= 5.6에서 사용할 수 있는 표현입니다.

SELECT (UNIX_TIMESTAMP(NOW()) * 1000000 + MICROSECOND(NOW(6))) AS unix_now_in_microseconds;

이것은 NOW()가 쿼리 전체에서 항상 같은 시간을 반환한다는 사실에 의존합니다. 플레인일 가능성이 있습니다.UNIX_TIMESTAMP()문서로는 잘 모르겠습니다.또한 다음과 같은 새로운 정밀도 인수에 MySQL > = 5.6이 필요합니다.NOW()기능(MariaDB도 동작합니다).

포스트그레스:SELECT (extract(epoch from now())*1000)::bigint;

MariaDB에서는

SELECT NOW(4);

밀리섹을 가지러.여기도 봐주세요.

포스트그레SQL은 다음과 같은 접근방식을 사용합니다.

SELECT round(EXTRACT (EPOCH FROM now())::float*1000)

mysql의 경우:

SELECT (UNIX_TIMESTAMP() * 1000) AS unix_now_in_microseconds; --- 1600698677000

저는 계속 다듬을 필요성을 느꼈습니다. 그래서 MySQL에서는:

현재 타임스탬프(밀리초):

floor(unix_timestamp(current_timestamp(3)) * 1000)

지정된 날짜(3)로부터의 타임스탬프(밀리초):

floor(unix_timestamp("2015-04-27 15:14:55.692") * 1000)

타임스탬프(밀리초)를 datetime(3)로 변환:

from_unixtime(1430146422456 / 1000)

datetime(3)을 시간 스탬프로 변환(밀리초):

floor(unix_timestamp("2015-04-27 14:53:42.456") * 1000)

여기 있는 모든 사람들은 Doing very good의 코멘트를 듣거나 읽어보세요!UNIX_TIMESTAMP()함수는 datatime-string이 지정되면 MySQL Connection 또는 서버의 타임존에 따라 Unix 타임스탬프에 로컬 시간을 연결합니다.서머타임이 다른 시간대에 있을 때 1년에 1시간씩 문제가 발생합니다.

예를 들어 네덜란드에서는 10월의 마지막 일요일인 02:59:59에 처음 도달한 후 1초 후에 시간이 다시 02:00:00로 설정됩니다.「 」를 하는 NOW(),CURTIME() ★★★★★★★★★★★★★★★★★」SYSDATE()- 하여 - MySQL로 합니다.UNIX_TIMESTAMP()타임 스탬프가 잘못되어 버립니다.

예를 들어 2018년 10월 27일 Satudray의 시간과 타임스탬프는 다음과 같습니다.

Local time                        |  UTC Time                 |  Timestamp   |  Timestamp using MYSQL's UNIX_TIMESTAMP(NOW(4))
----------------------------------+---------------------------+--------------+-----------------------------------------------------
2018-10-27 01:59:59 CET (+02:00)  |  2018-10-26 23:59:59 UTC  |  1540598399  |  1540598399
2018-10-27 02:00:00 CET (+02:00)  |  2018-10-27 00:00:00 UTC  |  1540598400  |  1540598400 + 1 second
2018-10-27 02:59:59 CET (+02:00)  |  2018-10-27 00:59:59 UTC  |  1540601999  |  1540601999 
2018-10-27 03:00:00 CET (+02:00)  |  2018-10-27 01:00:00 UTC  |  1540602000  |  1540602000 + 1 second
2018-10-27 03:59:59 CET (+02:00)  |  2018-10-27 01:59:59 UTC  |  1540605599  |  1540605599
2018-10-27 04:00:00 CET (+02:00)  |  2018-10-27 02:00:00 UTC  |  1540605600  |  1540605600 + 1 second

그런데 2019년 10월 27일 일요일, 저희가 시계를 1시간 조정한 날입니다.있지 않기 첫 번째와02하면 MYSQL의 "02:00" +02:00를 한 타임스탬프(두 번째를 얻을 수 .지 + 01:00인지에 대한 정보가 포함되어 있지 않기 때문에 첫 번째와 두 번째 시간을 02:00:00로 변환하면 MYSQL을 사용할 때 동일한 타임스탬프(두 번째 02:00:00부터)를 얻을 수 있습니다.UNIX_TIMESTAMP(NOW(4))를 확인할 1 ++1 +입니다.따라서 데이터베이스의 타임스탬프를 확인할 때 +1 +1 +3601 +1 +1 ... +1 +1 +3599 +1 +1 등입니다.

Local time                        |  UTC Time                 |  Timestamp   |  Timestamp using MYSQL's UNIX_TIMESTAMP(NOW(4))
----------------------------------+---------------------------+--------------+-----------------------------------------------------
2019-10-27 01:59:59 CET (+02:00)  |  2019-10-26 23:59:59 UTC  |  1572134399  |  1572134399
2019-10-27 02:00:00 CET (+02:00)  |  2019-10-27 00:00:00 UTC  |  1572134400  |  1572138000 + 3601 seconds
2019-10-27 02:59:59 CET (+02:00)  |  2019-10-27 00:59:59 UTC  |  1572137999  |  1572141599
2019-10-27 02:00:00 CET (+01:00)  |  2019-10-27 01:00:00 UTC  |  1572138000  |  1572138000 - 3599 seconds
2019-10-27 02:59:59 CET (+01:00)  |  2019-10-27 01:59:59 UTC  |  1572141599  |  1572141599
2019-10-27 03:00:00 CET (+01:00)  |  2019-10-27 02:00:00 UTC  |  1572141600  |  1572141600 + 1 second

안타깝게도 현지시간 변환 시 MySQL에서 UNIX_TIMESTamp() 함수로 릴레이하는 것은 매우 신뢰성이 떨어집니다.「 」를 하는 대신에, 「 」를 사용합니다.SELECT UNIX_TIMESTAMP(NOW(4))현재 아래 코드를 사용하고 있으며, 이 코드를 사용하여 문제를 해결합니다.

SELECT ROUND(UNIX_TIMESTAMP() + (MICROSECOND(UTC_TIME(6))*0.000001), 4)

Mysql:

SELECT REPLACE(unix_timestamp(current_timestamp(3)', '.'),;

같은 함수를 .UNIX_TIMESTAMP_MS()현재 타임스탬프를 밀리초 단위로 반환합니다.

또, 다음의 조작도 실행할 수 있습니다.

SELECT UNIX_TIMESTAMP_MS(NOW(3)) ★★★★★★★★★★★★★★★★★」SELECT UNIX_TIMESTAMP_MS(DateTimeField)

이 프로젝트는 https://github.com/silviucpp/unix_timestamp_ms에 있습니다.

run을 실행하면 .make compile프로젝트 루트에 있습니다.

공유 만 하면 ./usr/lib/mysql/plugin/( 「 」 「 」 「 」 「 」

그런 다음 mysql 콘솔을 열고 다음을 수행합니다.

CREATE FUNCTION UNIX_TIMESTAMP_MS RETURNS INT SONAME 'unix_timestamp_ms.so';

이게 도움이 되길 바라, 실비우

밀리초 동안 다음과 같이 수행합니다.

select round(date_format(CURTIME(3), "%f")/1000)

다음의 방법으로 마이크로초를 취득할 수 있습니다.

select date_format(CURTIME(6), "%f")

언급URL : https://stackoverflow.com/questions/9624284/current-timestamp-in-milliseconds

반응형