2017-10-09 24 views
-2
DECLARE @Hours AS INT 
DECLARE @SubtractDate AS DATETIME 

SET @Hours=24 /* User input to have hours */ 
SET @SubtractDate=DATEADD(hh,@Hours,GETDATE()) - GETDATE() 

if @Hours>=24 


SELECT CONVERT(VARCHAR(10),DATEDIFF(DAY,'1900-01-01',@SubtractDate))+ ' Day(s) ' + 
CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate))+ ' Hour(s) 'AS [Result] 

Else 
SELECT CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate))+ ' Hour(s) ' AS [Result] 

編輯:複製粘貼從評論。輸入爲24小時或48小時時如何不能看到小時數的0值

當輸入:

SET @Hours=24 /* User input to have hours/

所需的結果將是:1 Day相反,它示出了:1 Day(s) 0 Hour(s)

另外:當輸入:

SET @Hours=48/User input to have hours */ 

所需的結果將是:2 Days代替,它顯示:2 Day(s) 0 Hour(s)

+3

(1)編輯你的問題,並提供樣本數據,預期的效果,和你想要什麼解釋。 (2)確定你正在使用的數據庫。該代碼不是MySQl代碼。 –

+1

....這段代碼最可能是SQL-server SQL。SQL-server支持函數DATEADD,DATEGET,DATEDIFF和DATEPART,並按照你的方式和用法聲明用戶變量。 –

+0

當輸入:SET @ Hours = 24/*用戶輸入有小時* /期望的結果將是:1天,而不是現在它顯示:1天0小時........ ..............................另外:輸入時:SET @ Hours = 48/*用戶輸入有小時* /期望結果將是:2天,而現在它顯示:2天0小時 – neer0097

回答

1

使用CASE檢查是否應該使用小時零件。

查詢

DECLARE @Hours AS INT 
DECLARE @SubtractDate AS DATETIME 

SET @Hours=24/* User input to have hours */ 
SET @SubtractDate=DATEADD(hh,@Hours,GETDATE()) - GETDATE() 

if @Hours>=24 


SELECT 
    CONVERT(VARCHAR(10),DATEDIFF(DAY,'1900-01-01',@SubtractDate))+ ' Day(s) ' + 

    + 

    CASE 
    WHEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) > 0 
    THEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) + ' Hour(s)' 
    ELSE '' 
    END 

    AS [Result] 

Else 
    SELECT 
    CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate))+ ' Hour(s) ' 
    AS [Result] 

結果集@時間= 24

| Result | 
|-----------| 
| 1 Day(s) | 

結果集@小時= 25

|    Result | 
|--------------------| 
| 1 Day(s) 1 Hour(s) | 

結果SET @小時= 48

| Result | 
|-----------| 
| 2 Day(s) | 

編輯:輸出格式化

查詢

DECLARE @Hours AS INT 
DECLARE @SubtractDate AS DATETIME 

SET @Hours=1/* User input to have hours */ 
SET @SubtractDate=DATEADD(hh,@Hours,GETDATE()) - GETDATE() 

if @Hours>=24 


SELECT 
    CASE 
    WHEN CONVERT(VARCHAR(10),DATEDIFF(DAY,'1900-01-01',@SubtractDate)) = 1 
    THEN CONVERT(VARCHAR(10),DATEDIFF(DAY,'1900-01-01',@SubtractDate))+ ' Day ' 

    WHEN CONVERT(VARCHAR(10),DATEDIFF(DAY,'1900-01-01',@SubtractDate)) >= 2 
    THEN CONVERT(VARCHAR(10),DATEDIFF(DAY,'1900-01-01',@SubtractDate))+ ' Days ' 
    END 

    + 

    CASE 
    WHEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) > 0 
    THEN CASE 
      WHEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) = 1 
      THEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) + ' Hour' 

      WHEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) >= 2 
      THEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) + ' Hours'   
     END 
    ELSE '' 
    END 

    AS [Result] 

Else 
    SELECT 
    CASE 
    WHEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) > 0 
    THEN CASE 
      WHEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) = 1 
      THEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) + ' Hour' 

      WHEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) >= 2 
      THEN CONVERT(VARCHAR(10),DATEPART(hh,@SubtractDate)) + ' Hours'   
     END 
    ELSE '' 
    END 
    AS [Result] 

結果集@小時= 1

| Result | 
|--------| 
| 1 Hour | 

結果集@小時= 2

| Result | 
|---------| 
| 2 Hours | 

結果集@時間= 24

| Result | 
|--------| 
| 1 Day | 

結果集@小時= 25

|    Result | 
|--------------------| 
| 1 Day 1 Hour  | 

結果集@小時數= 26

|  Result | 
|---------------| 
| 1 Day 2 Hours | 

結果集@小時= 48

| Result | 
|-----------| 
| 2 Days | 
+0

感謝您的這一點,但是當我把SET @ Hours = 65其結果是:2天17小時 – neer0097

+0

對不起,我感到困惑。我的意思是2天17小時是好的,但我怎麼能把1天1小時而不是1天1小時抱歉,因爲如此挑剔 - 任何幫助都會真正實現的 – neer0097

+0

@rumana應該是正確的2 * 24 = 48 .. 65 - 48 = 17 ... 72小時應該是3天 –

相關問題