![](/img/trans.png)
[英]How convert nvarchar column from a existing table to date? SQL Server
[英]How to convert nvarchar to date from one column to another in SQL Server
我有一個名為“Month Year Raw”的列,其中包含多個 nvarchar 類型的數據,如下所示:202201,我想將其轉換為名為“Month Year”的列,類似於“January 2022”。
這真是個壞消息。 您根本不應該將日期存儲為字符串,更不用說多次(這只是多余的存儲而沒有任何好處)。 甚至nvarchar
也不好; 為什么你需要使用 Unicode 個字符來表示yyyyMM
? 我知道 2020 年很糟糕,但您仍然不能使用 4 個便便表情符號 ( 03
)。
將日期存儲為適當的日期/時間數據類型,然后您將獲得內置驗證、可搜索查詢、日期數學等。您始終可以在顯示時間派生出這些顯示格式。
在負責任地約會中還有很多其他建議。
直到你能解決這個問題:
UPDATE dbo.BadIdeas
SET [Month Year] = CONCAT
(
DATENAME(MONTH, CONVERT(datetime,
[Month Year Raw] + '01', 112)),
' ',
YEAR(CONVERT(datetime,
[Month Year Raw] + '01', 112))
);
如果您只是想知道編程的可能性 - “202201”將采用LEFT(4)
字符作為年份, RIGHT(2)
個字符作為月份。 假設您收到了那個非原子 nvarchar 字符串,並且只需要一個一次性的臨時查詢。
您不會向表中添加新列,只是 select 需要 output。有一個名為 DATENAME DATENAME()
的內置 SQL 服務器 function 可將數字轉換為月份名稱。 由於數據存儲在 nvarchar 中,您需要轉換為兼容的 integer 才能使用這些函數,因此我將使用CAST()
。
DECLARE @variable nvarchar(100) = '202201'
SELECT DATENAME(MONTH, CAST(RIGHT(@variable, 2) as int)) + ' ' + LEFT(@variable, 4) AS [Answer]
output 中的結果:
2022 年 1 月
我要指出的幾件事:
LEFT()
和RIGHT()
等提取部分字符串。如果您需要使用系統函數,則必須使用CAST()
轉換非原子數據。改為使用日期時間數據類型的示例:
DECLARE @variable2 datetime = '2022-01-01'
SELECT FORMAT (@variable2, 'MMMM yyyy')
還導致:
2022 年 1 月
使用正確的數據類型可以縮短代碼,並且不需要提取或轉換數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.