我需要将convert
Time
值转换为integer
值。
例如:如果time
值为'07:00 PM'
,我需要将convert
改为19
。
我已尝试过以下查询来执行此操作。
select CAST(substring(CONVERT(varchar,convert(smalldatetime,'07:00 PM'),114), 1,2) as int) as VALUE
它返回所需的输出。但是big transactions
的情况需要花费太多时间。谁能建议我一个替代解决方案(也许是一个简单的解决方案)?
我无法使用datepart(hour, 'timevalue')
。因为有时间值'00:00 AM'
和'00:00 PM'
的数据通过转换错误.
在这种情况下,我需要将值返回为0
。“
答案 0 :(得分:2)
您似乎想从当时提取小时。使用datepart()
:
select datepart(hour, timecol)
答案 1 :(得分:1)
尝试此查询
DECLARE @test_date DATETIME
SET @test_date = N'07:00 PM'
SELECT DATEPART(hh, @test_date)
答案 2 :(得分:1)
使用DATEPART()......
DECLARE @DATE DATETIME = N'07:00 PM'
SELECT DATEPART(hh, @DATE)
答案 3 :(得分:1)
此示例假定:
A)您将时间存储为字符串。
B)格式始终 HH:MM AM / PM。
数据中的假设可能是非常危险的。特别是对于可能包含条纹值的大型数据集。如果可能的话,我会建议商店时间为TIME。这将允许您在SQL Server中使用许多日期/时间函数。它还将限制可以输入的值。
此示例使用以下示例数据:
样本数据
/* Example uses data below.
*/
DECLARE @Sample TABLE
(
TimeValue VARCHAR(8)
)
;
INSERT INTO @Sample
(
TimeValue
)
VALUES
('00:00 AM'),
('07:00 AM'),
('07:00 PM')
;
因为格式是固定的,我们可以依赖前两个字符来包含小时,最后两个字符告诉我们是否正在处理AM或PM。
实施例
/* Using LEFT and RIGHT to read the text value.
*/
SELECT
TimeValue,
LEFT(TimeValue, 2) + CASE WHEN RIGHT(TimeValue, 2) = 'PM' THEN 12 ELSE 0 END
FROM
@Sample
;
答案 4 :(得分:1)
首先将12 HR格式转换为24 HR格式:
convert(char(5),cast('07:00 PM' as datetime),108)
然后使用DatePart函数:
select datepart(hour,
convert(char(5),cast('07:00 PM' as datetime),108) )
答案 5 :(得分:0)
请检查link,您会明白这一点。