我有 ddmmyyyy char 格式的列。
| 日期 |
|---|
| 10112021 |
| 11112021 |
| 12112021 |
我想將這些記錄更改為預期的 yyyymmdd
| 日期 |
|---|
| 20211110 |
| 20211111 |
| 20211112 |
我嘗試了很多查詢,例如
convert(varchar,DATE, 112) as DATE
但結果仍然是 ddmmyyyy 格式,也嘗試過這樣
convert(varchar, cast(DATE as date), 112) as DATE
但結果是
從字串轉換日期和/或時間時轉換失敗
有什么建議?
uj5u.com熱心網友回復:
關鍵問題是您將日期值存盤為字串。你永遠不應該這樣做,因為它幾乎總是會導致進一步的問題。
因此,要更改格式,您首先必須將當前字串轉換為有效日期,然后根據convert需要對其進行格式化。
SELECT [Date]
-- First convert to a valid date time - the current format needs to be modified
, CONVERT(DATE, SUBSTRING([DATE], 1, 2) '-' SUBSTRING([DATE], 3, 2) '-' SUBSTRING([DATE], 5, 4), 105) [Proper Date Value]
-- Then convert back to a string in the desired format
, CONVERT(VARCHAR(8), CONVERT(DATETIME, SUBSTRING([DATE], 1, 2) '-' SUBSTRING([DATE], 3, 2) '-' SUBSTRING([DATE], 5, 4), 105), 112) [Formatted Date Value]
-- In fact you can actually just use direct string manipulation in this case
, SUBSTRING([DATE], 5, 4) SUBSTRING([DATE], 3, 2) SUBSTRING([DATE], 1, 2)
FROM (
VALUES
('10112021'),
('11112021'),
('12112021')
) AS D ([Date]);
回報:
| 日期 | 正確的日期值 | 格式化日期值 1 | 格式化日期值 2 |
|---|---|---|---|
| 10112021 | 2021-11-10 | 20211110 | 20211110 |
| 11112021 | 2021-11-11 | 20211111 | 20211111 |
| 12112021 | 2021-11-12 | 20211112 | 20211112 |
注意:您永遠不應該使用varchar沒有長度,因為在許多情況下它默認為長度 1,這會導致許多難以發現的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452422.html
