我正在使用微软SQL Server 2000,需要将我的时间列转换为24小时制而不是只有上午9:30、下午12:30等。我试图对此列进行排序,并认为它无法正常工作,因为它只是按照数字顺序进行排序而不是按照时间顺序。我认为可以使用函数FORMAT(Time, HH:mm:ss)来完成所需的操作,但是这似乎不是SQL Server中的函数,所以我现在陷入了困境。
我正在使用微软SQL Server 2000,需要将我的时间列转换为24小时制而不是只有上午9:30、下午12:30等。我试图对此列进行排序,并认为它无法正常工作,因为它只是按照数字顺序进行排序而不是按照时间顺序。我认为可以使用函数FORMAT(Time, HH:mm:ss)来完成所需的操作,但是这似乎不是SQL Server中的函数,所以我现在陷入了困境。
这是我第一次发布内容!我需要将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)
你只需要更改元素的顺序来设置你特定的本地时间。
获得的结果
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
9/8/2015 3:27:17 PM ---> 2015-09-08 15:27:17.000
希望能对某些人有所帮助!我在这个网站上找到了很多帮助!
你也可以试试这个。
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))