[英]Varchar date to datetime sql
我有01012018的varchar
日期格式,我需要將此轉換為SQL Server視圖中的日期:
CONVERT(VARCHAR(50), CONVERT(DATE, [Date], 103), 103)
我沒有喜悅嘗試了以上。
請幫忙
解析不是“內置”日期之一的日期時,SQL Server可能會有些麻煩。 您可以使用parse()
/ try_parse()
,但這是一個相對較新的函數。
在您的情況下,直接構造日期值非常簡單:
select convert(date, concat(right(ddmmyyyy, 4), substring(ddmmyyyy, 3, 2), left(ddmmyyyy, 2)))
from (values ('01012018')) v(ddmmyyyy)
CONVERT
日期和時間樣式中沒有樣式ddMMyyyy
,但是有dd/MM/yyyy
,因此您可以將這些字符注入並進行轉換:
SELECT TRY_CONVERT(date, STUFF(STUFF(v.ddmmyyyy, 5, 0, '/'), 3, 0, '/'), 103)
FROM (VALUES ('01012018')) v (ddmmyyyy);
我還使用了TRY_CONVERT
您還有其他“壞”值(也許是'01312019'
)。 當varchar
表示無效日期時,這些將返回NULL
。
使用CONVERT()
作為
DECLARE @Var VARCHAR(10) = '01012018'
SELECT CONVERT(DATE,
CONCAT( RIGHT(@Var, 4),
SUBSTRING(@Var, 3, 2),
LEFT(@Var, 2)
)
)
最后,我建議ALTER
表(這是正確的解決方案)並將列的數據類型更改為DATE
數據類型。
CREATE TABLE T(
MyCol VARCHAR(10)
);
INSERT INTO T(MyCol) VALUES
('01012018'),
('01022018'),
('01032018'),
('WrongData');
SELECT MyCol
FROM T;
UPDATE T
SET MyCol = TRY_CONVERT(DATE,
CONCAT( RIGHT(MyCol, 4),
SUBSTRING(MyCol, 3, 2),
LEFT(MyCol, 2)
)
);
ALTER TABLE T
ALTER COLUMN MyCol DATE;
SELECT MyCol
FROM T;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.