Sql server 2005 请帮助我构建快速/优化的t-sql,以便将12小时时钟转换为24小时时钟
我有一个表只包含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,很抱歉英语不好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
vcha我创建了一个名为12hourlock的表,其中包含您在示例中指定的列
SELECT LEFT(CAST(CONVERT(time, [Time] + ' ' + AMPM, 8) AS nvarchar(5)), 5) AS 'Time'
FROM [12HourClock]
对不起,但不太清楚你在找什么。包含时间的数据类型是什么?您试图生成的数据类型(或字符串格式)是什么?没有这些,这个问题很容易被(错误的)解释 尽管如此,一些指导方针可能会有所帮助:
- 将数据(如有必要)转换为适当的日期/时间数据类型
- SQL 2008具有
数据类型。如果可以的话,用这个来保持简单Time
- 如果开始时间增加12小时,请使用
功能。使用此选项可将PM数据的(转换)时间增加12小时DATEADD
案例
语句做一些棘手的事情。这是一个基于我意识到无法完成查询之前所拥有的样本:
,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。所以它们应该是字符串,对吗?顺便说一句,非常感谢你的指导。非常感谢。这也帮助我了解一些情况。