簡體   English   中英

轉換為DATE T-SQL

[英]Convert to DATE T-SQL

我有一個日期格式為dd.mm.yyyy Ex 29.05.2016的字段。 我想選擇DATE作為日期,但是嘗試以下操作時出現錯誤:

CAST([PublishedDate] AS DATE) AS PublishedOn

從字符串轉換日期和/或時間時轉換失敗。

閱讀此內容后,我嘗試了以下操作:

 CONVERT(VARCHAR(10), [PublishedDate], 126)  AS PublishedDate

但這不會更改格式。 如何選擇以YYYY-MM-DD格式顯示。

編輯:我有3個不同的日期字段,所有這三個字段具有不同的格式:dd.mm.yyyy | yyyy-mm-dd | yyyy / mm / dd。 我想選擇所有具有相同格式的文件。 由於我使用此查詢來生成報告,因此現在我有不同格式的日期。 執行以下操作:

CONVERT(VARCHAR(10), [PublishedDate], 104) AS PublishedOn
CONVERT(VARCHAR(10), [ValidFromDate], 104)  AS ValidFrom

給我以下 輸出

您應該使用正確的格式 ,在這種情況下,應為:

CONVERT(date, [PublishedDate], 104)  AS PublishedDate

而且,一旦它成為datedatetime或其他date數據類型,它就根本沒有格式。

編輯 :一旦您的值在date數據類型中,您當然可以重鑄到varchar以獲得所需日期的直觀表示。

edit2 :如果要使用date數據類型,則應轉換為日期: CONVERT(DATE, [your column], [your format]) 如果要使用nvarchar數據類型,則應轉換為nvarchar: CONVERT(nvarchar(x), [your column], [your format])

您有一個要以某種格式顯示的nvarchar ,因此應首先轉換為日期,然后再轉換回varchar (我懷疑您需要unicode):

CONVERT(VARCHAR(10), CONVERT(date, [PublishedDate], 104), 126)

您必須為當前具有不同格式的列更改104

到目前為止,最好的解決方案是將數據類型更改為date 這是一項工作,但絕對值得。

如果您真的想要字符串,請執行以下操作:

CONVERT(char(10), CONVERT(date,[date], 104),126)  AS PublishedDate

使用原始格式,使用104格式(dd.mm.yyyy)將字符串轉換為日期,然后使用126格式(yyy-mm-dd)將日期轉換為字符串。

如果您有較新版本的SQL Server,則可以嘗試

SELECT COALESCE(TRY_CAST(adate AS DATE), TRY_convert(DATE, adate, 126), TRY_convert(DATE, adate, 104)), format
FROM (
VALUES ('26.04.2017', 'dkformat') , 
('01.01.2017', 'EU format'), 
('12.12.12', 'unknown format')
) a(aDate, format)

但是,當您嘗試猜測源的格式時,您正走在一條危險的道路上。去那兒,穿着那件T恤衫就可以了。

我仍然討厭0.1%的轉換錯誤。

此解決方案將導致NULL,因此您可以查看轉換失敗的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM