我有一個應該代表未來季度的SQL Server FLOAT列:驗證十進制值是YYYY.Q格式
DELIVERY_DATE(浮動,NULL)
雖然這不是一個理想的格式對於日期表示形式,我在Excel工作簿中接收數據並使用SSIS包將其加載到SQL Server中。它來自外部供應商,所以它就是這樣。
值必須採用YYYY.Q格式。年度季度需要在未來,所以,如果我們在2016年第三季度,2016.3的值是不正確的。只有一年,沒有四分之一的值也是不正確的。
制定此檢查的最佳方法是什麼?
我有一個應該代表未來季度的SQL Server FLOAT列:驗證十進制值是YYYY.Q格式
DELIVERY_DATE(浮動,NULL)
雖然這不是一個理想的格式對於日期表示形式,我在Excel工作簿中接收數據並使用SSIS包將其加載到SQL Server中。它來自外部供應商,所以它就是這樣。
值必須採用YYYY.Q格式。年度季度需要在未來,所以,如果我們在2016年第三季度,2016.3的值是不正確的。只有一年,沒有四分之一的值也是不正確的。
制定此檢查的最佳方法是什麼?
A float
表達這種數據是真的,真的,真的,真的很糟糕的方式,因爲float是十進制數的近似表示。如果您對結構有任何控制權,您應將其更改爲decimal(5, 1)
或其他某種類型。
可以使用得到當前季度以這種形式:
select year(getdate()) + datepart(quarter, getdate())/10.0
的問題是,小圓角的差異可能意味着預期下不起作用:
where Delivery_Date <= year(getdate()) + datepart(quarter, getdate())/10.0
交貨日期可能是2016.30000000001,第二部分可能會返回2016.299999997。他們都看起來像「2016.3」,但他們不相等。
我想你可以加少許增量,使其工作:
where Delivery_Date <= 0.01 + year(getdate()) + datepart(quarter, getdate())/10.0
但使用不當float
是危險的。
我希望這不是家庭作業,否則你的教授將是一個非常殘酷的怪物。爲什麼不把Q3 2016存儲爲2016/07/01? – ajeh