如何解决请帮助我建立快速/优化的t-sql,将12小时制转换为24小时制
| 我有一个表只包含2列(时间和AMPM)。 两列都是NVARCHAR。 时间...... AMPM 07:30 ..... AM 08:45 ..... PM 12:00 PM 01:00 .... PM 12:00 AM 我需要构建T-SQL将上述数据转换为 时间 07:30 20:45 12:00 13:00 00:00 如您所知,我想以自定义字符串格式将12小时制转换为24小时制。 现在,我必须将时间列转换为日期时间变量,并再次转换为12小时制,因为我不想拆分字符串然后执行加/减。 请建议/指导我进行优化的T-SQL来执行此操作。由于某些限制,我无法在代码上执行此任务。我被迫仅在SQL SERVER 2005/2008上执行此操作。 感谢在广告中,对不起英语。 茶解决方法
如果要支持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,\'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
, 抱歉,但是您在这里找的不是很清楚。包含时间的数据类型是什么?您要产生的数据类型是什么(或字符串格式)?没有这些,这个问题就很容易被(错误)解释。
话虽如此,一些准则可能会有所帮助:
将您的数据(如有必要)转换为适当的日期/时间数据类型
SQL 2008的数据类型为“ 1”。如果可以的话,使用它可以使事情变得简单
如果/当您将开始时间增加12小时时,请使用DATEADD
功能。使用此功能可以将您的(转换)时间增加12个小时,以获取PM数据。
但是...正确配置12:00 AM或PM将非常棘手。一方面,在24小时内将12:00 AM(又名午夜)表示为00:00,这可能是您想要的,也可能不是。但是,如果您花了12:00 PM,并且(如上所述)为“ PM”添加了12小时,那么您将到达Midnight,这不是您想要的。奇怪的是,您必须使用CASE
语句来做一些棘手的事情。这是一个基于我之前意识到无法完成查询的示例:
,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))
, 我创建了一个名为12HourClock的表,其中包含您在示例中指定的列。
SELECT LEFT(CAST(CONVERT(time,[Time] + \' \' + AMPM,8) AS nvarchar(5)),5) AS \'Time\'
FROM [12HourClock]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。