簡體   English   中英

VARCHAR日期到日期時間SQL

[英]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.

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