我必须以奇怪的格式显示时间。 例如,如果时间是15:30:45.5000,我需要显示“153045.5”。
为此,我有以下查询:
SELECT LEFT(CONVERT(varchar(20), GETDATE(), 114), 2) +
SUBSTRING(CONVERT(varchar(20), GETDATE(), 114), 4, 2) +
SUBSTRING(CONVERT(varchar(20), GETDATE(), 114), 7, 2) + '.' +
SUBSTRING(CONVERT(varchar(20), GETDATE(), 114), 10, 1);
我能做些什么来避免重复表达CONVERT(varchar(20),GETDATE(),114)?
编辑:
我在这里看到了一个非常酷的答案,在我刷新页面后因某些原因被删除了,但它让我想到了另一种解决方案:
SELECT REPLACE(RIGHT(CONVERT(varchar(21), getdate(), 126), 10), ':', '')
虽然这个答案并没有以一般方式解决原始问题,但它仍然以不同的方式解决了我的问题。
答案 0 :(得分:5)
除了其他答案中的函数,您还可以在公用表表达式(CTE)或内联视图中计算部分结果:
; WITH gd(getDate_114)
AS (SELECT CONVERT(VARCHAR(20), GETDATE(), 114))
SELECT LEFT(getDate_114, 2)
+ SUBSTRING(gd.getDate_114, 4, 2)
+ SUBSTRING(gd.getDate_114, 7, 2)
+ '.'
+ SUBSTRING(gd.getDate_114, 10, 1)
FROM gd
答案 1 :(得分:2)
在函数中包装所有格式代码
create function dbo.FormatTime (@time datetime)
returns varchar(20)
as
begin
return (select LEFT(CONVERT(varchar(20), @time, 114), 2)
+ SUBSTRING(CONVERT(varchar(20), @time, 114), 4, 2)
+ SUBSTRING(CONVERT(varchar(20), @time, 114), 7, 4))
end
并将其用作
select dbo.FormatTime(getdate())
为避免在函数体中重复,您可以将@time
转换为varchar
存储在变量中
declare @dateAsVarchar varchar(20) = CONVERT(varchar(20), @time, 114)
return (select LEFT(@dateAsVarchar, 2)
+ SUBSTRING(@dateAsVarchar, 4, 2)
+ SUBSTRING(@dateAsVarchar, 7, 4))
答案 2 :(得分:2)
不幸的是,除非我弄错了,否则在SQL Server 2008 R2中没有办法将其最小化。您必须按照您已经完成的方式构建它。另一个选项(正如@jonasnas已经指出的那样)是创建一个返回当前日期格式的函数。
但是,如果您能够/愿意升级到SQL Server 2012,则可以利用FORMAT()
函数格式化字符串:
Select Format(GetDate(), N'HHmmss.f')
答案 3 :(得分:1)
您可以在数据库中创建一个函数并使用它。这是示例How to create a function in SQL Server