簡體   English   中英

如何在列處於混合模式下將varchar列轉換為日期時間

[英]How to covert to varchar column to date time where column is in mixed mode

我在sql server 2012中有一列。該列的日期存儲在varchar中。 日期數據如下所示:dd / mm / yyyy

但是有一個陷阱。 列中的數據處於拒絕轉換狀態。 細節調查顯示,有些可以轉換為日期模式,而有些則不能(可能是由於日期存儲為文本模式)。 我試圖以日期格式上傳數據。 但是它也拒絕這樣做。

樣本數據:

Original    Validation Check
10/03/1974  3/10/1974
02/02/1990  2/2/1990
16/05/1988  NULL

我該怎么辦?

PS:發現該列中存儲的某些數據不是日期格式,因此拒絕轉換。 感謝@Digvijay Verma先生,他正確地預測了這一點,並在他的幫助下發現了錯誤。 僅消除這些錯誤並用有效日期替換那些錯誤即可。

問候,薩達特

數據庫中的日期格式(dd / mm / yyyy)為103。

所以你應該嘗試

SELECT convert(datetime, '31/10/2013', 103)

根據您的說明,似乎您需要yyyy-mm-dd格式的數據。 因此請嘗試以下。

SELECT convert(varchar(max),(convert(datetime, '31/10/2013', 103)), 120)

根據您的評論,由於您確定該列中使用的字符串格式( dd/mm/yyyy ),因此我懷疑您的問題可能是由於前導/后跟空格引起的

嘗試使用Ltrim()Rtrim()Isdate()函數。 如果您在convertedDate字段中獲得任何日期01/01/1900 (假設此日期不在您的字段中),那么麻煩就多於空格:

Select Original,
       Case when IsDate(Ltrim(Rtrim(Original))) = 1
            then Convert(date, Ltrim(Rtrim(Original)), 103)
            else Convert(date, '19000101', 112) --date in yyyymmdd format
       End ConvertedDate,
From yourTable

如果日期采用dd / mm / yyyy格式,請嘗試

set dateformat dmy
select try_convert(datetime,date_col) from table

所有其他格式將顯示為NULL

您可以嘗試以下方法:

SELECT Original,
       case when left(Original,2) > 12 then convert(datetime, Original, 103)
            else convert(datetime, Original, 101) 
       end
from t1

這是有關SQLFiddle的一個小演示

暫無
暫無

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

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