7

我有以下问题,我使用的是 SQL Server MS,下面是我的结果。它看起来很简单,但我无法弄清楚。

我的查询:

SELECT  RIGHT(CONVERT(VARCHAR(26), Timein, 109), 14) from vwSignIn

早上 9:12:16:597会给我这个

我想要这个上午 9:12:16作为我的结果。

提前致谢。

4

5 回答 5

18

这是一种只有一次转换的方法:

SELECT RIGHT(CONVERT(CHAR(20), GETDATE(), 22), 11);

但是,您应该考虑在客户端对其进行格式化,因为字符串格式化更加强大和合适。

在 SQL Server 2012 中,您将能够使用FORMAT(),这意味着您不必记住所有这些样式编号(但我仍然认为您最好尽可能在表示层中执行此操作):

SELECT FORMAT(GETDATE(), 'hh:mm:ss tt');

请注意,FORMAT()相对于其他方法来说是昂贵的

于 2013-04-02T16:57:23.977 回答
13

这是您可以做到的一种方法:

CONVERT(VARCHAR(8), Timein, 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), Timein, 9), 2) 

SQL 小提琴演示

于 2013-04-02T16:43:43.707 回答
1

我发现这种方式更优雅一点:

SELECT LTRIM(Right(REPLACE(CONVERT(nvarchar(MAX),CAST(GetDate() as smalldatetime), 109),':00:000', ' '), 8));
于 2014-06-11T18:11:49.670 回答
1
SELECT substring(convert(varchar(20), GetDate(), 9), 13, 5) + ' ' + substring(convert(varchar(30), GetDate(), 9), 25, 2)
于 2015-09-21T09:08:22.020 回答
0

我猜最简单的方法是:

select ISNULL(CONVERT(VARCHAR(10), Timein, 100), '')
于 2015-09-08T07:50:17.497 回答