在SQL Server 2014年,我有一個varchar
列有多個日期格式:VARCHAR值到日期格式
shipdate
-----------
12/29/2014 -- mm/dd/yyyy
5/20/15 -- mm/dd/yy
2012/05/22 -- yyyy/mm/dd
我想將它們轉換爲YYYY/MM/DD
日期格式,但我做不到,我試過:
CAST(SRD.[ShipDate] AS DATEtime)
沒有成功。
有什麼想法?
在SQL Server 2014年,我有一個varchar
列有多個日期格式:VARCHAR值到日期格式
shipdate
-----------
12/29/2014 -- mm/dd/yyyy
5/20/15 -- mm/dd/yy
2012/05/22 -- yyyy/mm/dd
我想將它們轉換爲YYYY/MM/DD
日期格式,但我做不到,我試過:
CAST(SRD.[ShipDate] AS DATEtime)
沒有成功。
有什麼想法?
嗯。 。 。你真的想把日期存儲爲日期。你的情況,你可以使用try_convert()
,並保持試驗,直到它的工作原理:
select coalesce(try_convert(date, shipdate),
try_convert(date, shipdate, 1),
try_convert(date, shipdate, 101)
) as presumed_date
運行此代碼,交叉手指,並希望沒有任何日期足夠模糊,不能正確解析 – Jamiec
它的工作!,這裏的奇怪的事情是,我有其他列具有相同的值和格式,並與一個簡單的演員工作:S –
目前尚不清楚是否正在試圖做到這一點查詢或嘗試將數據下遷移到不同的列,所以我的例子需要填寫並加入你的具體需求。 (將...替換爲適合的)。你可以應用一個特定的格式並使用try convert。然後多次迭代的數據集來捕獲所有值:
SET DATEFORMAT mdy;
-- ...
TRY_CONVERT(datetime2, [ShipDate]) AS Result;
-- ...
GO
SET DATEFORMAT dmy;
-- ...
TRY_CONVERT(datetime2, [ShipDate]) AS Result;
-- ...
GO
-- ...
CONVERT會工作得很好,雖然樣式將需要111
SELECT CONVERT(VARCHAR(10),CAST(SRD.[ShipDate] AS DATETIME),111);
你的代碼示例顯示日期,雖然沒時間;另外,我沒有看到你想按照你的問題看到時間。因此,我建議您實際將其轉換爲DATE而不是DATETIME - 如下面的查詢所示。
SELECT CONVERT(VARCHAR(10),CAST(SRD.[ShipDate] AS DATE),111);
SELECT CONVERT(VARCHAR(10),CAST(SRD.[ShipDate] AS DATE),111);
這應該工作,因爲你要找的風格是111
這就是爲什麼你在不VARCHAR列存儲日期。如果你不知道每一行的格式,我認爲你堅持嘗試和失敗,並嘗試每一行。 – Jamiec
我想知道如果沒有可用的格式信息,你將如何解碼10/11/12? – Serg