2017-01-23 159 views
0

我想以hh:mm am/pm格式顯示我的結果,但是我的查詢僅適用於am結果,但不適用於中午12:00和在SQL Server:以hh:mm am/pm格式轉換時間

select 
    timein, timeout, 
    SUBSTRING(convert(varchar, timein, 108), 1, 5), 
    SUBSTRING(convert(varchar, TimeOut, 108), 1, 5) 
from 
    timeinandoutTable 
where 
    progtype = 'cmp' 
    and TimeIn is not null and TimeOut is not null 

結果

Timein     TimeOut   timeinresult timeoutresult 
----------------------------------------------------------------------- 
1900-01-01 15:00:00  1900-01-01 16:10:00 15:00  16:10 
1900-01-01 10:00:00  1900-01-01 17:00:00 10:00  17:00 
1900-01-01 09:30:00  1900-01-01 16:00:00 09:30  16:00 
+1

的https:// WWW。 mssqltips.com/sqlservertip/4052/build-a-cheat-sheet-for-sql-server-date-and-time-formats/也請不要使用像'varchar'這樣的可變長度類型,而不指定長度,請參閱http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –

+0

在客戶端而不是在服務器端執行此操作。 –

回答

1

必須使用的,使用 「AM/PM」 的風格之一。你的例子(108)不是。使用這樣的事情,而不是(風格100,取最後7個字符):

select timein, timeout, 
substring(convert(varchar(19), timein, 100), len(convert(varchar(19), timein, 100)) - 6, 7), 
substring(convert(varchar(19), timeout, 100), len(convert(varchar(19), timeout, 100)) - 6, 7) 
from timeinandoutTable 
where progtype= 'cmp' and TimeIn is not null and TimeOut is not null 

這裏是一個自包含的查詢就可以運行看這方面的工作:

select convert(datetime, 'Dec 31 2015 10:25PM', 100) as datetime_value, 
substring(convert(varchar(19), 'Dec 31 2015 10:25PM', 100), len(convert(varchar(19), 'Dec 31 2015 10:25PM', 100)) - 6, 7) as my_string_value 


datetime_value   | my_string_value 
2015-12-31 22:25:00.000| 10:25PM 
相關問題