我正在使用Microsoft SQL Server 2000并且需要将我的时间列转换为24小时时间而不仅仅是上午9:30,下午12:30等等。我正在尝试对此列进行排序,我相信它不是工作是因为它只是用数字而不是时间来看待事物。我认为我需要的功能可以用FORMAT(Time,HH:mm:ss)来完成,但这似乎不是SQL Server中的一个函数,所以我现在卡住了。
答案 0 :(得分:9)
答案 1 :(得分:1)
我第一次发帖!我不得不从M / D / YYYY h:mm:ss AM / PM转换为Datetime。请注意我的本地时间是DD-MM-YYYY所以我必须在转换为Datetime之前转换为该格式。要转换的字段名称是" Valeur"在表N_IsaacForm中。以下是我在SQL 2008中的使用方法:
select NIF.Valeur, CASE WHEN CHARINDEX('PM',NIF.Valeur) = 0
THEN CONVERT(datetime,substring(NIF.Valeur, P2.Pos + 1, P3.Pos - P2.Pos - 1) + '-'
+ RIGHT('0' + substring(NIF.Valeur, P3.Pos + 1, P4.Pos - P3.Pos - 3),8) + '-'
+ RIGHT('0' + substring(NIF.Valeur, P1.Pos + 1, P2.Pos - P1.Pos - 1),2) + ' '
+ RIGHT('0' + substring(NIF.Valeur, 1, P1.Pos-1),2))
--add 12 hours if PM
ELSE DATEADD(hour,12,CONVERT(datetime,substring(NIF.Valeur, P2.Pos + 1, P3.Pos - P2.Pos - 1) + '-'
+ RIGHT('0' + substring(NIF.Valeur, P3.Pos + 1, P4.Pos - P3.Pos - 3),8) + '-'
+ RIGHT('0' + substring(NIF.Valeur, P1.Pos + 1, P2.Pos - P1.Pos - 1),2) + ' '
+ RIGHT('0' + substring(NIF.Valeur, 1, P1.Pos-1),2)))
END
FROM N_IsaacForm AS NIF (nolock)
cross apply (select (charindex('/', NIF.Valeur))) as P1(Pos)
cross apply (select (charindex('/', NIF.Valeur, P1.Pos+1))) as P2(Pos)
cross apply (select (charindex(' ', NIF.Valeur, P2.Pos+1))) as P3(Pos)
cross apply (select (charindex('M', NIF.Valeur, P3.Pos+1))) as P4(Pos)
WHERE CHARINDEX('M',NIF.Valeur) > 0 --(I had other values in the table with proper format)
您只需更改元素的顺序即可设置特定的本地时间。
获得的结果
8/20/2015 1:11:31 AM ---> 2015-08-20 01:11:31.000
8/19/2015 10:37:32 PM ---> 2015-08-19 22:37:32.000
10/7/2015 8:51:37 PM ---> 2015-10-07 20:51:37.000
2015年9月8日下午3:27:17 ---> 2015-09-08 15:27:17.000
希望它可以帮到某人!我在这个网站上找到了很多帮助!
答案 2 :(得分:0)
你也可以试试这个,
select CONVERT(time, CONVERT(varchar,CONVERT(date, getdate()))+ ' 02:24 PM', 120)
上述查询将返回14:24:00.0000000
如果您只想要忽略毫秒的时间部分,
select convert(varchar(8),CONVERT(time, CONVERT(varchar,CONVERT(date, getdate()))+ ' 02:24 PM', 120))
我在SQL 2008中测试了上述内容并且工作正常。