任何人都可以幫助我以下提取的代碼我放在一起。該錯誤似乎在CASE
聲明中,但我無法看到THEN之後的所有代碼部分已經單獨測試並正常工作。SQL Server:錯誤將字符串轉換爲smalldatetime?
另外需要注意的是所有日期爲datetime
數據類型爲yyyy-mm-dd hh:mm:ss.sss
SELECT
TICKET_ID,
CAL_CR.a_DayName,
CREATED,
CAL_CL.a_DayName,
CLOSED,
CASE
WHEN CAL_CR.A_DATE IN ('Saturday','Sunday') AND CLOSED IS NULL THEN (DATEDIFF(WEEKDAY,created, closed)*10*60 - (DATEDIFF(MINUTE,CURRENT_TIMESTAMP,CAST(CAST(CAST(CURRENT_TIMESTAMP AS DATE) AS VARCHAR) + ' 18:00' AS DATETIME))))
WHEN CLOSED IS NULL THEN (DATEDIFF(WEEKDAY,created, closed)*10*60 - (DATEDIFF(MINUTE,CAST(CAST(CAST(CREATED AS DATE) AS VARCHAR) + ' 08:30' AS DATETIME),CREATED)) - (DATEDIFF(MINUTE,CURRENT_TIMESTAMP,CAST(CAST(CAST(CURRENT_TIMESTAMP AS DATE) AS VARCHAR) + ' 18:00' AS DATETIME))))
WHEN CAL_CR.A_DATE IN ('Saturday','Sunday') AND CLOSED IS NOT NULL THEN (DATEDIFF(WEEKDAY,created, closed)*10*60 - (DATEDIFF(MINUTE,CLOSED,CAST(CAST(CAST(CLOSED AS DATE) AS VARCHAR) + ' 18:00' AS DATETIME))))
WHEN CAL_CL.A_DATE IN ('Saturday','Sunday') AND CLOSED IS NOT NULL THEN (DATEDIFF(WEEKDAY,created, closed)*10*60 - (DATEDIFF(MINUTE,CAST(CAST(CAST(CREATED AS DATE) AS VARCHAR) + ' 08:30' AS DATETIME),CREATED)))
WHEN (CAL_CR.A_DATE IN ('Saturday','Sunday')) AND (CAL_CL.A_DATE IN ('Saturday','Sunday')) AND CLOSED IS NOT NULL THEN (DATEDIFF(WEEKDAY,created, closed)*10*60)
ELSE (DATEDIFF(WEEKDAY,created, closed)*10*60 - (DATEDIFF(MINUTE,CAST(CAST(CAST(CREATED AS DATE) AS VARCHAR) + ' 08:30' AS DATETIME),CREATED)) - (DATEDIFF(MINUTE,CLOSED,CAST(CAST(CAST(CLOSED AS DATE) AS VARCHAR) + ' 18:00' AS DATETIME))))
END AS Open_Minutes
FROM
OST_TICKET
LEFT JOIN
AMI_STATIC.DBO.SB_CALENDAR CAL_CR
ON
CAL_CR.a_Date = CAST(CREATED AS DATE)
LEFT JOIN
AMI_STATIC.DBO.SB_CALENDAR CAL_CL
ON
CAL_CL.a_Date = CAST(CLOSED AS DATE)
提前許多感謝任何幫助都沒有。
感謝民主黨,
採取您的建議和整理的代碼了遠一點。見下圖:
SELECT
TICKET_ID,
CAL_CR.a_DayName,
CREATED,
CAL_CL.a_DayName,
CLOSED,
CASE
WHEN CAL_CR.A_DATE IN ('Saturday','Sunday') AND CLOSED IS NULL THEN DATEDIFF(WEEKDAY,created, closed)*10*60 - DATEDIFF(MINUTE,CAST(CURRENT_TIMESTAMP AS TIME),CAST('18:00' AS TIME))
WHEN CLOSED IS NULL THEN DATEDIFF(WEEKDAY,created, closed)*10*60 - DATEDIFF(MINUTE,CAST('08:30' AS TIME),CAST(CREATED AS TIME)) - DATEDIFF(MINUTE,CAST(CURRENT_TIMESTAMP AS TIME),CAST('18:00' AS TIME))
WHEN CAL_CR.A_DATE IN ('Saturday','Sunday') AND CLOSED IS NOT NULL THEN DATEDIFF(WEEKDAY,created, closed)*10*60 - DATEDIFF(MINUTE,CAST(CLOSED AS TIME),CAST('18:00' AS TIME))
WHEN CAL_CL.A_DATE IN ('Saturday','Sunday') AND CLOSED IS NOT NULL THEN DATEDIFF(WEEKDAY,created, closed)*10*60 - DATEDIFF(MINUTE,CAST('08:30' AS TIME),CAST(CREATED AS TIME))
WHEN (CAL_CR.A_DATE IN ('Saturday','Sunday')) AND (CAL_CL.A_DATE IN ('Saturday','Sunday')) AND CLOSED IS NOT NULL THEN DATEDIFF(WEEKDAY,created, closed)*10*60
ELSE DATEDIFF(WEEKDAY,created, closed)*10*60 - DATEDIFF(MINUTE,CAST('08:30' AS TIME),CAST(CREATED AS TIME)) - DATEDIFF(MINUTE,CAST(CLOSED AS TIME),CAST('18:00' AS TIME))
END AS Open_Minutes
FROM
OST_TICKET
LEFT JOIN
AMI_STATIC.DBO.SB_CALENDAR CAL_CR
ON
CAL_CR.a_Date = CAST(CREATED AS DATE)
LEFT JOIN
AMI_STATIC.DBO.SB_CALENDAR CAL_CL
ON
CAL_CL.a_Date = CAST(CLOSED AS DATE)
仍然得到同樣的錯誤,但:把字符串爲smalldatetime數據類型時
轉換失敗。
哪個開始有點煩人。
以代碼分開仍然有效,以及
SELECT
DATEDIFF(WEEKDAY,created, closed)*10*60 - DATEDIFF(MINUTE,CAST('08:30' AS TIME),CAST(CREATED AS TIME)) - DATEDIFF(MINUTE,CAST(CLOSED AS TIME),CAST('18:00' AS TIME))
FROM
OST_TICKET
WHERE
TICKET_ID = 30374
感謝,
馬庫斯
民主黨,我不得不添加額外的信息,因此已editted這一問題的主體 – LinkOps 2012-02-07 16:10:29
@linkOps - 您的編輯意味着最後一個SQL實例工作,還是給出同樣的錯誤?此外,你能列出你使用的所有字段的數據類型嗎?或者更重要的是,任何VARCHAR()? – MatBailie 2012-02-07 16:14:55
看起來像是我的錯。當cal_cr/cal_cl.a_date實際上應該是cal_cr/cl.a_dayname時 – LinkOps 2012-02-08 09:24:23