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
答案 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,它可能会更容易