2015-11-12 89 views
2

我正在使用Linux和MySQL 5.6将一个15位数字计算到MySQL的BIGINT列中

我想在MySQL的BIGINT列中存储一个15位的NUMBER。

数量的计算公式为:

10000 * (date +"%s") + ` date +"%N" | cut -c1-5 ` 

其中%s是10位数字信号出现时间 和%N是纳秒

我如何计算这个数字在MySQL 5.6的SQL语句?

Select 10000 * UNIX_TIMESTAMP() 

可以做第一部分。

如何做好第二部分

+0

您是否想从日期时间获得新纪元时间并将其存储到BIG INT Column? –

+0

'Unix_timestamp()* 1000000000'自1970-01-01 00:00:00开始提供nano秒。从[docs](https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html):**如果不带参数调用,则返回一个Unix时间戳(自' 1970-01-01 00:00:00'UTC)作为无符号整数。如果使用date参数调用UNIX_TIMESTAMP(),则它会返回自1970年1月1日“1970-01-01 00:00:00”以来秒数的值。日期可能是DATE字符串,DATETIME字符串,TIMESTAMP或格式为YYMMDD或YYYYMMDD的数字。** – Fr0zenFyr

+0

Unix_timestamp()自1970-01-01 00:00:00以来返回秒(不是纳秒)。在MySQL中,[Select Unix_timestamp()* 1000000000]将在最后得到一个所有ZEROS的数字,而不是纳秒 –

回答

0

有一个类似的MySQL中“切”的方法。

SUBSTRING(str, pos, len) 

但是,这+字符串连接将任何数字转换为字符串。在另一个呼叫这个可以变成BIGINT我想是这样的:

CAST(your_number AS BIGINT); 

这样做的缺点是,石膏和调用是相当昂贵的,你的“纳秒”事情是反正越来越过时。

使用bigint/unsigned自动增量ID并添加一个额外的列与UNIQUEID或随机的东西会更好(*)。

*)我不知道你的用例。