我需要使用WEEK功能,因此我需要日期类型。
虽然我在db中有一个 int 类型,如20150101,代表2015年1月1日。
我试过了FROM_UNIXTIME
,但显然这不是我想要的:
select FROM_UNIXTIME(20150101) from dual;
+-------------------------+
| FROM_UNIXTIME(20150101) |
+-------------------------+
| 1970-08-22 14:15:01 |
+-------------------------+
我有办法将yyyymmdd(int)转换为日期类型吗?
答案 0 :(得分:5)
20150101
不是unix时间戳,其格式为ymd
,您需要date_format
格式化
mysql> select date_format('20150101','%Y-%m-%d') as date ;
+------------+
| date |
+------------+
| 2015-01-01 |
+------------+
1 row in set (0.00 sec)
mysql> select unix_timestamp('2015-01-01');
+------------------------------+
| unix_timestamp('2015-01-01') |
+------------------------------+
| 1420050600 |
+------------------------------+
1 row in set (0.00 sec)
mysql> select FROM_UNIXTIME(1420050600) ;
+---------------------------+
| FROM_UNIXTIME(1420050600) |
+---------------------------+
| 2015-01-01 00:00:00 |
+---------------------------+
1 row in set (0.00 sec)
答案 1 :(得分:1)
您只需将其选为date()
即可自动转换。
SELECT DATE(20150101) FROM dual;
答案 2 :(得分:1)
这样的事情应该有效:
SELECT WEEK(
CONCAT(
SUBSTR(20150101, 1, 4),
'-',
SUBSTR(20150101, 5, 2),
'-',
SUBSTR(20150101, 7, 2)
)
)
FROM dual
...假设字符数始终为8(如20150101
中所示)。