从unix时间戳中提取月 - 年

时间:2015-06-18 14:59:29

标签: sql sql-server sql-server-2008-r2

mytable.timecreated 是SQL Server 2008 R2数据库上的BIGINT列,它包含一个unix时间戳。

此查询:

SELECT DATEADD(s,mdl_user_enrolments.timestart,'19700101 02:00') as TheDate
FROM mytable

以这种格式给我日期:

2015-05-30 20:30:05.000

如何从该时间戳中仅检索月份和年份,如下所示:

May 2015

以下SQL似乎可以完成这项工作,但有更简单的方法吗?

SELECT 
    CAST(
        CASE 
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 1 Then 'January'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 2 Then 'February'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 3 Then 'March'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 4 Then 'April'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 5 Then 'May'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 6 Then 'June'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 7 Then 'July'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 8 Then 'August'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 9 Then 'September'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 10 Then 'October'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 11 Then 'November'
            WHEN month(dateadd(s,timecreated,'19700101 02:00')) = 12 Then 'December'
        END AS NVARCHAR(10))
    + ' ' +
    CAST(YEAR(dateadd(s,timecreated,'19700101 02:00')) AS NVARCHAR(5)) AS MyDate
FROM mytable

3 个答案:

答案 0 :(得分:2)

如何使用datename()

select (datename(month, dateadd(second, timecreated, '19700101 02:00')) + 
        datename(year, dateadd(second, timecreated, '19700101 02:00'))
       )

我要离开02:00,因为这就是你提出问题的方式。但是,正确的转换将使用00:00,除非您尝试更正某个时区。

另请注意,datename()返回的值取决于您的国际化设置,因此它们不一定是英文。

答案 1 :(得分:2)

您可以使用一些内置的CONVERT功能。我不知道是否有一个你想要的特定格式,但106足够接近可以与RIGHT函数结合得到你想要的,如下所示:

SELECT
RIGHT(CONVERT(VARCHAR(11),mdl_user_enrolments.timestart,106), 8) as MyDate
FROM MyTable

答案 2 :(得分:1)

您使用的是哪种语言?我只是将UNIX时间戳放在数据库中,然后使用PHP,我会做

<?php date("M Y", strtotime($your_unix_timestamp));
?> 

但是你必须从SQL获取数据到PHP,所以如果你打算使用PHP,它可能会更容易