我修改了客戶現有的查詢,我遇到一個有些莫名其妙的問題失敗。SQL日期時間轉換時,沒有轉換應以地方
我們的客戶使用SQL Server 2008 R2和有關數據庫爲用戶提供了通過利用一個EAV結構的指定其表的一個自定義字段的能力。存儲在該結構中的所有值都是varchar(255)
,並且其中一些字段用於存儲日期。有問題的查詢將被修改爲使用這些字段中的兩個,並將其與當前日期進行比較(一個是開始,另一個是結束)以確定哪一行是「當前」。
我遇到的問題是該查詢的一部分執行CONVERT(DateTime, eav.Value)
以將varchar
變爲DateTime
。該轉換自己的所有succedd,我可以包括值作爲SELECT
條款的一部分,但問題的一部分是給我一個轉換錯誤:
Conversion failed when converting date and/or time from character string.
真正踢球的是這樣的:如果我定義這個基地查詢(得到實體的名單有變平成單排兩個自定義字段值)作爲視圖,並選擇對視圖和getdate()
過濾視圖,然後它工作正常,但如果我添加一個連接到第二失敗表使用視圖中的一個(非日期)字段。我意識到這可能有點難以遵循,所以我可以發佈一個示例查詢,如果需要的話,但這個問題已經變得有點長了。
我試圖重新創建在另一個數據庫的基本結構和包括樣本數據,但新的數據庫的行爲與預期,所以我在虧損就在這裏。
編輯在情況下,它是非常有用的,這裏的視圖的語句:
create view Festival as
select
e.EntityId as FestivalId,
e.LookupAs as FestivalName,
convert(Date, nvs.Value) as ActivityStart,
convert(Date, nve.Value) as ActivityEnd
from tblEntity e
left join CustomControl ccs on ccs.ShortName = 'Activity Start Date'
left join CustomControl cce on cce.ShortName = 'Activity End Date'
left join tblEntityNameValue nvs on nvs.CustomControlId = ccs.IdCustomControl and nvs.EntityId = e.EntityId
left join tblEntityNameValue nve on nve.CustomControlId = cce.IdCustomControl and nve.EntityId = e.EntityId
where e.EntityType = 'Festival'
發生故障的查詢是這樣的:
select *
from Festival f
join FestivalAttendeeAll fa on fa.FestivalId = f.FestivalId
where getdate() between f.ActivityStart and f.ActivityEnd
然而,這個工程:
select *
from Festival f
where getdate() between f.ActivityStart and f.ActivityEnd
(EntityId
/FestivalId
ar ËINT列)
可能是由於語言環境,以及美國與非美國格式的日期...檢查語言環境設置...您可以發佈展示該行爲的示例數據嗎? –
也許從第一個失敗併發布的查詢開始。 – Paparazzi
@Mitch:如果我回答的話,那也是我的第一個想法,但這些都是美國的日期,格式可以是'Jan 1 2011 12:00 AM'或'2011/1/1 12:00 AM 」。令人困惑的部分是,錯誤似乎與(根據我的邏輯,顯然可能是錯誤的)不應該影響轉換是否發生。我假設如果數據真的很糟糕,那麼從視圖本身選擇會產生一個錯誤,但事實並非如此。 –