在sql server 2008中从24小时时删除前导零

时间:2015-04-14 14:24:36

标签: sql-server-2008 datetime

我有这段代码

SELECT convert(varchar(5), getdate(), 108)

返回09:00,或任何时间。

我希望它返回9:00,当它是下午1点。我希望它能在13:00返回。

1 个答案:

答案 0 :(得分:1)

一种不优雅但功能齐全的方法只是使用CASE语句测试前导零的存在,然后删除它,如果它在那里:

DECLARE @TheDate DATETIME

SET @TheDate = '2015-04-14 09:30:00.000'
SELECT 
    CASE 
        WHEN LEFT(convert(varchar(5), @TheDate, 108),1) != '0' 
        THEN convert(varchar(5), @TheDate, 108)
        ELSE RIGHT(convert(varchar(5), @TheDate, 108), 4)
      END

SET @TheDate = '2015-04-14 13:00:00.000'
SELECT 
    CASE 
        WHEN LEFT(convert(varchar(5), @TheDate, 108),1) != '0' 
        THEN convert(varchar(5), @TheDate, 108)
        ELSE RIGHT(convert(varchar(5), @TheDate, 108), 4)
      END

SET @TheDate = GETDATE()
SELECT 
    CASE 
        WHEN LEFT(convert(varchar(5), @TheDate, 108),1) != '0' 
        THEN convert(varchar(5), @TheDate, 108)
        ELSE RIGHT(convert(varchar(5), @TheDate, 108), 4)
      END

略微有趣,但没有任何简单的借口(改编自this answer):

DECLARE @TheDate DATETIME

SET @TheDate = '2015-04-14 09:30:00.000'
SELECT substring(convert(varchar(5), @TheDate, 108), patindex('%[^0]%',convert(varchar(5), @TheDate, 108)), 10) 

SET @TheDate = '2015-04-14 13:00:00.000'
SELECT substring(convert(varchar(5), @TheDate, 108), patindex('%[^0]%',convert(varchar(5), @TheDate, 108)), 10)

SET @TheDate = GETDATE()
SELECT substring(convert(varchar(5), @TheDate, 108), patindex('%[^0]%',convert(varchar(5), @TheDate, 108)), 10)