2013-12-10 32 views
-1

嗨有語法問題 - 至少我認爲它是。我希望有一個默認的日期作爲物化視圖內的情況下,語句的一部分(MS SQL 2008 +):在視圖中使用CAST或CONVERT MSSQL

, CASE 
    WHEN WithFirstDate = 0 THEN CONVERT(DATE,'1900-JAN-1', 101) 
    WHEN WithFirstDate = 1 THEN 
     Start1 
    ELSE --WithFirstDate = 2 
     Start2 
    END ValidDate 

,我發現了以下錯誤: 視圖使用從字符串到datetime或smalldatetime的隱式轉換。使用顯式CONVERT具有確定性的樣式值

我想有一個工程無論本地化的(即美國風格的日期,日本風格的日期和世界的其餘部分)

感謝

+3

什麼是Start1,Start2和ValidDate的sql數據類型? – mayabelle

+2

ValidDate只是一個別名,而不是一列。但是,是的,其他兩列的數據類型很重要。 –

+0

你似乎繼續做一些隨機編輯回滾。請選擇你喜歡的版本並堅持下去。 –

回答

1
的解決方案

您傳遞CONVERT函數的101代碼與您的格式不匹配。請檢查下面的鏈接,找到正確的代碼:

http://msdn.microsoft.com/en-us/library/ms187928.aspx

+0

檢查並嘗試100,仍然是相同的錯誤 – user2711068

+0

看看錶,100與'1900-JAN-1'不匹配。拿Aaron的建議,如果它不適合你,就完全放棄代碼:CONVERT(DATE,'1900-01-01') –

4

相反的:

CONVERT(DATE,'1900-JAN-1', 101) 

只要做到:

CONVERT(DATE,'1900-01-01') 

然而,問題可能是與其他兩列, Start1Start2。我猜這些不是DATE列。

+0

+1。問題似乎是這種情況返回0時的日期時間值,否則返回無日期時間。 – jean

+0

Start1和Start2都是DATE類型的計算列 – user2711068

+0

僅使用CONVERT(DATE,'1900-01-01')給出相同的錯誤 – user2711068

0

玉以及這個論壇已經下坡恕我直言,第一我的帖子得到無盡的編輯的語法,它不改變的意思,那麼它可能被否決,因爲它是「難」來回答。 https://stackoverflow.com/users/61305/aaron-bertrand是在正確的線上。謝謝Aaron。問題是其中一個參考表中的計算列是非確定性的。在視圖上創建物化聚簇索引時,此錯誤僅在標記中解決。我會發佈一個鏈接到完整的答案,但不允許。恥辱我不能在幾年前恢復我所有的舊徽章和積分。這裏的完整答案http://tinyurl.com/knor8qk

相關問題