我有了每月一行和量被存儲在不同的列(DAY1,DAY2 ... DAY31)的表。我創建了一個視圖,使用unpivot將其分割成每天一行,以便我可以對給定的日期範圍進行計算。逆透視鑑於導致誤差轉化成日期時以此爲標準日期
當嘗試通過僅選擇特定日期範圍要使用的視圖,它在錯誤只要當我在表DAY29..DAY31結束。如果表格只包含28天的日期,那麼它工作正常。
不幸的是改變表的結構是不是一個真正的選擇,我試圖用內聯函數相同的事情,但在相同的錯誤最終
消息242,級別16,狀態3,52號線將nvarchar數據類型 類型轉換爲日期時間數據類型會導致超出範圍的值。
這是我的表:
CREATE TABLE CONSUMPTION (
ID int NOT NULL,
YEAR int NOT NULL,
MONTH int NOT NULL,
DAY1 int NULL,
DAY2 int NULL,
DAY3 int NULL,
DAY31 int NULL,
CONSTRAINT TEST_PK PRIMARY KEY CLUSTERED (ID, YEAR, MONTH)
)
insert into CONSUMPTION values (1,2015,1,10,20,30,310)
insert into CONSUMPTION values (1,2015,2,10,20,30,NULL)
這是我的看法:
create view CONSUMPTION_CALENDAR as
select
ID,
YEAR,
MONTH,
convert(datetime, substring(COLNAME, 4,2) + '.' + convert(varchar, [MONTH]) + '.' + convert(varchar, [YEAR]), 104) as CONSDATE,
CONSKG
from
(
select * from CONSUMPTION
) S
unpivot (CONSKG for COLNAME in (DAY1,DAY2,DAY3,DAY31)) as UP
go
如果我運行它,就像這樣,它工作正常:
select * from CONSUMPTION_CALENDAR
但如果我添加標準,它會返回數據,但也會失敗:
select * from CONSUMPTION_CALENDAR where CONSDATE >= '20150101'
有什麼解決辦法,我可以選擇只是某些日期範圍?
編輯:數據的視圖:
ID YEAR MONTH CONSDATE CONSKG
1 2015 1 2015-01-01 10
1 2015 1 2015-01-02 20
1 2015 1 2015-01-03 30
1 2015 1 2015-01-31 310
1 2015 2 2015-02-01 10
1 2015 2 2015-02-02 20
1 2015 2 2015-02-03 30
實施例SQL Fiddle。
正在改變結構出來的問題?這個數據的「自然」表示是未轉換的形式,爲什麼它不是這樣存儲的? –
您可以在視圖中發佈數據示例(CONSUMPTION_CALENDAR)嗎? –
這張桌子在很多地方都有使用,當然還有不止一種,所以我不太想去碰它。在日曆格式中添加@haytem的數據 –