2012-03-21 35 views
0

我在SQL Server 2008的數據庫表中有一個公共字段。字段上的類型是nvarchar(255)。該字段包含來自應用程序的許多不同類型的值。SQL Server 2008:在nvarchar字段中存儲日期

我目前需要將字段中的值從「Jul 19 2011 12:00 AM」格式轉換爲格式「2011-07-19 00:00:00.000」。

我知道我能得到這個回來查詢格式的語句:

SELECT CONVERT(datetime, value, 121) 
    FROM [Table] 
    where ... 

這給了我,我要找的顯示格式,但是當我試圖與該修正的格式來更新表使用以下查詢,它將其轉換回「Jul 19 2011 12:00 AM」格式。

更新查詢:

Update [Table] 
    set Value = CONVERT(datetime, t2.value, 121) 
    from [Table] t1 
    inner join 
    (SELECT ID, CONVERT(datetime, value, 121) as value 
    FROM [Table]) t2 
    on t2.ID = t1.ID 

有沒有什麼辦法來迫使目標爲nvarchar(255)領域保持 「2011-07-19 00:00:00.000」 從轉換指定的格式?

+1

這是同樣的價值,這就是你如何查看數據。 – SQLMason 2012-03-21 16:37:29

回答

0

使用這樣的事情,改變GETDATE()你的日期字段:

select cast(datepart(yyyy,getdate()) as char(4)) + '-' 
     + replace(str(datepart(mm,getdate()),2),' ','0') + '-' 
     + replace(str(datepart(dd,getdate()),2),' ','0') + ' ' 
     + replace(str(datepart(hh,getdate()),2),' ','0') + ':' 
     + replace(str(datepart(mi,getdate()),2),' ','0') + ':' 
     + replace(str(datepart(ss,getdate()),2),' ','0') + '.' 
     + replace(str(datepart(ms,getdate()),3),' ','0') 

你可以找到它舒服地一個函數來得到這種格式。

在將其標記爲一個糟糕的問題之前,請仔細閱讀該問題。 「在nvarchar字段中存儲日期」。這名男子希望將日期作爲「TEXT」存儲在一個字段中,並使用他想要的格式!請多加小心。

+0

謝謝JotaBe。那做了我想要的。我試圖將值存儲在具有特定格式的文本字段中,並用我的值字段替換代碼中的「getdate()」部分,這些部分完成了我希望完成的任務。再次感謝你。 – user1283938 2012-03-21 17:27:34

0

通過它的外觀,沒有必要做一個自我加入更新。

這應該做你想要什麼:

update [Table] 
set value = convert(nvarchar(23), convert(datetime, value, 100), 121) 
+0

感謝您的意見。我仍然習慣於SQL Server及其允許的語法(比以前更加自由)。 – user1283938 2012-03-21 18:36:23