[英]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
而且,一旦它成為date
, datetime
或其他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.