![](/img/trans.png)
[英]Oracle ordering of results using a mixed varchar column but numeric where clause
[英]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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.