在SQL Server中将时间转换为24小时制

4

我正在使用微软SQL Server 2000,需要将我的时间列转换为24小时制而不是只有上午9:30、下午12:30等。我试图对此列进行排序,并认为它无法正常工作,因为它只是按照数字顺序进行排序而不是按照时间顺序。我认为可以使用函数FORMAT(Time, HH:mm:ss)来完成所需的操作,但是这似乎不是SQL Server中的函数,所以我现在陷入了困境。


如果列的类型为DateTime,则排序应该是正确的。您看到的字符串只是底层时间的表示。 - Ray
3个回答

11

这会将现有列的值转换还是仅获取当前时间? - gdawgrancid
1
@gdawgrancid:将GETDATE更改为您的值。如果该值不是datetime,则首先将其强制转换为datetime。 - gbn

1

这是我第一次发布内容!我需要将M/D/YYYY h:mm:ss AM/PM转换为Datetime。请注意我的本地时间格式为DD-MM-YYYY,因此在转换为Datetime之前,我必须以该格式进行转换。需要转换的字段名为N_IsaacForm表中的“Valeur”。以下是我在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)

你只需要更改元素的顺序来设置你特定的本地时间。

获得的结果

  1. 8/20/2015 1:11:31 AM ---> 2015-08-20 01:11:31.000

  2. 8/19/2015 10:37:32 PM ---> 2015-08-19 22:37:32.000

  3. 10/7/2015 8:51:37 PM ---> 2015-10-07 20:51:37.000

  4. 9/8/2015 3:27:17 PM ---> 2015-09-08 15:27:17.000

希望能对某些人有所帮助!我在这个网站上找到了很多帮助!


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中测试了上述内容,运行良好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接