耆那教,它看起來像你想的代碼in the answer here適應自己的情況。 Andomar在那裏做的是從一個只包含單個值的子查詢中選擇信息,因爲他無法訪問原始海報的源代碼和表格。這樣做可以讓每個人都可以運行並查看它,無論他們碰巧擁有哪種數據庫模式。
將這樣的內容適配到自己的代碼中將非常簡單:只需將alias.column
引用(這裏是sub.Dt
)替換爲您自己的值,然後將您的表放入FROM子句而不是子查詢中。因此,如果你的表被命名爲SomeTable
,和您的列被命名爲FetchTime
,查詢變爲:
select
convert(datetime, substring(SomeTable.FetchTime,1,4) + '-' +
substring(SomeTable.FetchTime,5,2) + '-' +
substring(SomeTable.FetchTime,7,2) + ' ' +
substring(SomeTable.FetchTime,9,2) + ':' +
substring(SomeTable.FetchTime,11,2) + ':' +
substring(SomeTable.FetchTime,13,2))
from
SomeTable
理論上你就可以有一個問題,如果你FetchTime
場被存儲爲整數:SUBSTRING()可能不會對這些數據的工作類型。要解決這一點,你可以CAST()
價值爲varchar,就像這樣:
select
convert(datetime, substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),1,4) + '-' +
substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),5,2) + '-' +
substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),7,2) + ' ' +
substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),9,2) + ':' +
substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),11,2) + ':' +
substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),13,2))
from
SomeTable
或者,如果你只是單值之後,就可以回到原來的查詢和簡單的寫:
select
convert(datetime, substring(sub.Dt,1,4) + '-' +
substring(sub.Dt,5,2) + '-' +
substring(sub.Dt,7,2) + ' ' +
substring(sub.Dt,9,2) + ':' +
substring(sub.Dt,11,2) + ':' +
substring(sub.Dt,13,2))
from
(select CAST(FetchTime AS VARCHAR(20)) as Dt FROM SomeTable) sub
convert/substr有什麼問題?它看起來像它做你想要的? – 2014-10-20 15:17:55
儘管該值可能會巧合地存儲爲數字類型,但出於轉換目的,該數字沒有有意義的日期/時間表示。爲此,它需要被視爲一個字符串。現有的方法(從子串構造日期/時間)似乎是合理的。 – David 2014-10-20 15:20:04
@AlexK。謝謝回覆。是的,它只轉換'20100101000000'值。我怎麼能用這個來轉換列中的所有記錄? – Jain 2014-10-20 15:22:38