Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 请帮助我构建快速/优化的t-sql,以便将12小时时钟转换为24小时时钟_Sql Server 2005_Tsql_Sql Server 2008 - Fatal编程技术网

Sql server 2005 请帮助我构建快速/优化的t-sql,以便将12小时时钟转换为24小时时钟

Sql server 2005 请帮助我构建快速/优化的t-sql,以便将12小时时钟转换为24小时时钟,sql-server-2005,tsql,sql-server-2008,Sql Server 2005,Tsql,Sql Server 2008,我有一个表只包含2列(Time和AMPM)。 两列都是NVARCHAR 时间……AMPM 上午7:30 08:45…..下午 下午12点 01:00….下午 上午12:00 我需要构建t-sql来将上述数据转换为 时间 07:30 20:45 12:00 13:00 00:00 你可能知道,我想把12小时制转换成24小时制的自定义字符串格式。 现在,我必须将time列转换为datetime变量,并再次转换为12小时时钟系统,因为我不想拆分字符串,然后执行加法/减法 请建议/指导我使用优化的t-s

我有一个表只包含2列(Time和AMPM)。 两列都是NVARCHAR

时间……AMPM

上午7:30

08:45…..下午

下午12点

01:00….下午

上午12:00

我需要构建t-sql来将上述数据转换为

时间

07:30

20:45

12:00

13:00

00:00

你可能知道,我想把12小时制转换成24小时制的自定义字符串格式。 现在,我必须将time列转换为datetime变量,并再次转换为12小时时钟系统,因为我不想拆分字符串,然后执行加法/减法

请建议/指导我使用优化的t-sql来执行此操作。由于某些限制,我无法在代码上执行此任务。我被迫只在SQLServer2005/2008上执行此操作

谢谢adv,很抱歉英语不好


vcha

我创建了一个名为12hourlock的表,其中包含您在示例中指定的列

SELECT LEFT(CAST(CONVERT(time, [Time] + ' ' + AMPM, 8) AS nvarchar(5)), 5) AS 'Time'
FROM [12HourClock]

对不起,但不太清楚你在找什么。包含时间的数据类型是什么?您试图生成的数据类型(或字符串格式)是什么?没有这些,这个问题很容易被(错误的)解释

尽管如此,一些指导方针可能会有所帮助:

  • 将数据(如有必要)转换为适当的日期/时间数据类型
  • SQL 2008具有
    Time
    数据类型。如果可以的话,用这个来保持简单
  • 如果开始时间增加12小时,请使用
    DATEADD
    功能。使用此选项可将PM数据的(转换)时间增加12小时
但是。。。正确配置上午12:00或下午12:00将很棘手。一方面,12:00AM(又称午夜)在24小时内表示为00:00,这可能是您想要的,也可能不是您想要的。但如果你在下午12:00(如上所述)加上12个小时的“下午”,你就到了午夜,这不是你想要的。很有可能你不得不用
案例
语句做一些棘手的事情。这是一个基于我意识到无法完成查询之前所拥有的样本:

  ,dateadd(hh
           ,case
              when SomeTime = '12:00' and AM_PM = 'PM' then 0
              when SomeTime = '12:00' and AM_PM = 'AM' then 12
              when AM_PM = 'AM' then 0
              else 12  --  PM
            end
           ,cast(SomeTime as time))

如果要支持MS SQL 2005,则不能使用时间数据类型。 我的解决方案使用了一些转换:

-- test data:
SELECT '07:30' AS Time, 'AM' AS AMPM
INTO testTime
UNION ALL 
SELECT '08:45' AS Time, 'PM'
UNION ALL 
SELECT '12:00' AS Time, 'PM'
UNION ALL 
SELECT '01:00' AS Time, 'PM'
UNION ALL 
SELECT '12:00' AS Time, 'AM'
UNION ALL 
SELECT '07:15' AS Time, 'AM'

-- Final query
SELECT TIME, AMPM , 
       CASE WHEN AMPM = 'PM' THEN 
         CAST( CAST(LEFT(Time, 2) AS int) + 12 AS varchar)+substring(Time, 3, 3) 
       ELSE 
         Time 
       END
FROM testTime

我想我在我的问题中已经提到了两个专栏都是NVARCHAR。所以它们应该是字符串,对吗?顺便说一句,非常感谢你的指导。非常感谢。这也帮助我了解一些情况。