Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 以月和年为单位计算年龄,或将秒设置为年和月?_Mysql - Fatal编程技术网

Mysql 以月和年为单位计算年龄,或将秒设置为年和月?

Mysql 以月和年为单位计算年龄,或将秒设置为年和月?,mysql,Mysql,我需要知道一个人在某个时间点的年龄。我将DOB和这个“时间点”都作为unix时间戳 当时我可以减去它们得到它们的年龄,但。。。我看不到任何格式的年和月 我该怎么做 具体来说,我想要的格式是5y 6m这是您的查询: SELECT CONCAT( YEAR(DATE_ADD('2000-01-01',INTERVAL (DATEDIFF(FROM_UNIXTIME(tpit), FROM_UNIXTIME(dob))) DAY))-2000, 'y ', MONTH(DATE_ADD

我需要知道一个人在某个时间点的年龄。我将DOB和这个“时间点”都作为unix时间戳

当时我可以减去它们得到它们的年龄,但。。。我看不到任何格式的年和月

我该怎么做

具体来说,我想要的格式是
5y 6m

这是您的查询:

SELECT CONCAT(    
  YEAR(DATE_ADD('2000-01-01',INTERVAL (DATEDIFF(FROM_UNIXTIME(tpit), FROM_UNIXTIME(dob))) DAY))-2000, 'y ',
  MONTH(DATE_ADD('2000-01-01',INTERVAL (DATEDIFF(FROM_UNIXTIME(tpit), FROM_UNIXTIME(dob))) DAY)), 'm'
  ) as output 
FROM ..... WHERE .....
SELECT CONCAT(
    TIMESTAMPDIFF(YEAR, FROM_UNIXTIME(`dob`), FROM_UNIXTIME(`point_in_time`)), 
    'y ',
    MOD(TIMESTAMPDIFF(MONTH, FROM_UNIXTIME(`dob`), FROM_UNIXTIME(`point_in_time`)), 12),
    'm'
) `age`
...
...
另一个可能是:

SELECT CONCAT(
    FLOOR((`point_in_time` - `dob`) / 31536000),
    'y ',
    FLOOR(MOD((`point_in_time` - `dob`) / 31536000 * 12, 12)),
    'm'
) `age`
...
...

希望这有所帮助?

您将无法通过MySQL进行这种复杂的解析。你需要使用一个脚本,用PHP或Python之类的语言。@Patrick:我肯定可以。MySQL非常强大。这是否明智是另一回事。请看下面我的回答;这些查询应该可以很好地用于you@Abhay例如我看见他们了。也不需要在评论中指出它们;)明天我回去工作时,我会试试你的解决办法。如果您对datediff返回天数的选择正确,您的解决方案听起来更有希望。我认为这可能不会给出正确的结果,因为1。DATEDIFF执行date1-date2,因此顺序应该是tpit,dob;2.YEAR()和MONTH()接受日期参数,但DATEDIFF()返回daysAbhay右侧的天数差。这肯定不行
FROM_UNIXTIME
需要下划线,日期的顺序是混合的,
DATEDIFF
返回日期,因此无法获取年份部分。@Mask,Abhay,修复了将日期转换为日期的查询。