2017-10-18 176 views
0

我试图在SQL 2008 R2中运行下面的脚本,但出现错误(FORMAT is not recognized)。我在想,安装的SQL Server是2008 R2。任何想法将脚本转换为在SQL Server 2008 R2中工作?提前致谢。格式化函数在SQL Server 2008 R2中不起作用

declare @sample table (dt datetime) 

insert @sample values ('2017-10-09 20:04:00.000') 
insert @sample values ('2017-10-07 00:55:22.000') 
insert @sample values ('2017-10-16 15:52:34.000') 
insert @sample values ('2017-10-06 03:09:31.000') 
insert @sample values ('2017-10-06 19:56:09.000') 
insert @sample values ('2017-10-06 06:36:39.000') 
insert @sample values ('2017-10-05 16:19:14.000') 

select 
    s.dt, 
    DATEADD(hh,8,s.dt) AS dt_plus_8, 
    FORMAT(CAST(DATEADD(HH,8,s.dt) AS DATETIME), 'hh tt') as TIME_HOURLY 
from 
    @sample s 

期望的结果:

DT----------------------DT_Plus_8--------------Tim_Hourly 
---------------------------------------------------------- 
2017-10-09 20:04:00.000--2017-10-10 04:00:00.000--04 AM 
2017-10-07 00:55:22.000--2017-10-07 08:00:00.000--08 AM 
2017-10-16 15:52:34.000--2017-10-16 23:00:00.000--11 PM 
2017-10-06 03:09:31.000--2017-10-06 11:00:00.000--11 AM 
2017-10-06 19:56:09.000--2017-10-07 03:00:00.000--03 AM 
2017-10-06 06:36:39.000--2017-10-06 14:00:00.000--02 PM 
2017-10-05 16:19:14.000--2017-10-06 00:00:00.000--12 AM 
+0

'FORMAT'是**新功能**在SQL Server引入** ** 2012 - 它在早期版本中不存在,并且也没有简单的“解决方法”。你需要改变你的代码才能工作*不需要*'FORMAT',例如通过使用适当的'CONVERT'函数调用和'CONVERT'函数的适当样式:[T-SQL中的CAST和CONVERT](https://docs.microsoft.com/zh-cn/sql/t-sql/函数/ cast-and-convert-transact-sql) –

回答

0

将这项工作对你

SELECT 
    s.dt, 
    DATEADD(HOUR,8,s.dt) AS dt_plus_8, 
    FORMAT(CAST(DATEADD(HH,8,s.dt) AS DATETIME), 'hh tt') as TIME_HOURLY 
    ,RIGHT('00' + CONVERT(VARCHAR,DATEPART(HOUR, DATEADD(HOUR,8,s.dt)) % 12),2) 
     + ' ' 
      + CASE WHEN DATEPART(HOUR, DATEADD(HOUR,8,s.dt)) > =12 
       THEN 'PM' 
       ELSE 'AM' 
       END AS TIME_HOURLYv2 
FROM 
    @sample s 
+0

非常感谢。 – Jov

+0

@Jov很高兴帮助。如果您可以将此标记为接受的答案(打勾)并投票赞赏。 –

相关问题