簡體   English   中英

如何在SQL中將日期字符串(ddMMyy)格式化為日期字符串(yyMMdd)?

[英]How to format Date-String (ddMMyy) to Date-String (yyMMdd) in SQL?

我有一列名為“ date”且類型為varchar的日期,日期格式為:“ ddMMyy”,但是要使用“ between”,我需要將日期更改為“ yyMMdd”格式。

我已經嘗試了2個小時,但無法解決,謝謝您的幫助。

修復您的數據結構! 您應該能夠:

update t
    set datecol = convert(date, datecol, 104);  -- this format seems to work

alter table t alter column datecol date;

alter table t add datecol_ddmmyy as (replace(convert(varchar(8), datecol, 104), '.', '');

瞧! 該列現在可以正確用作日期。 您還有另一列將日期格式設置為字符串。

如果您在日期部分之間使用分隔符,那么我認為Gordon Linoff的答案會很好。 (我知道您說過您不能更改表的結構,但是您至少可以使用他提供的將日期字符串轉換為正確日期的表達式。)但是我對您的問題的理解是,您的日期實際上是六個字符沒有分隔符的字符串(例如010199),當我嘗試將日期樣式104用於此類數據時出現錯誤。 不幸的是,這種格式似乎與該鏈接上給出的任何預定義樣式都不匹配,因此我認為您可能必須訴諸於字符串操作才能將日期重新排列為yyMMdd (ISO)格式並從那里轉換。 例如:

declare @Table table ([date] varchar(6));
insert @Table values ('010101'), ('010110'), ('010149'), ('010150'), ('010199');

select
    [date], 
    ConvertedDate = convert(date, 
        substring([date], 5, 2) + 
        substring([date], 3, 2) + 
        substring([date], 1, 2), 12) 
from 
    @Table;

在我的數據庫中,結果如下:

date    ConvertedDate
010101  2001-01-01
010110  2010-01-01
010149  2049-01-01
010150  1950-01-01
010199  1999-01-01

請注意,由於您的數據庫使用兩位數年份,因此SQL Server使用隔離日期來確定它應將年份解釋為屬於20世紀還是21世紀。 就我而言,您可以從上面的結果集推導出為2049。您可以查看本文,以獲取有關查詢和更改此設置的信息(盡管我認為更改此設置對於您而言可能是不可能的)。

希望數據庫設置與填充該數據庫的任何軟件所使用的邏輯相對應,但是如果沒有,並且如果您無法使其同步,則必須更新上面顯示的ConvertedDate表達式以手動計算世紀,並使用樣式112(而不是12)表示存在四位數的年份。 大概是這樣的:

declare @TwoDigitYearCutoff int = 90;
select
    [date], 
    ConvertedDate = convert(date, 
        case when convert(int, substring([date], 5, 2)) <= @TwoDigitYearCutoff then '20' else '19' end +
        substring([date], 5, 2) + 
        substring([date], 3, 2) + 
        substring([date], 1, 2), 112) 
from 
    @Table;

當然,這一切都比較混亂,但是我不確定有更好的方法。 祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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