我在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先生,他正确地预测了它并在他的帮助下我发现了错误。只有删除这些错误并替换那些有效日期才能解决问题。
此致 萨达特
答案 0 :(得分:2)
db(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)
答案 1 :(得分:2)
根据您的评论,由于您确定列中的字符串格式(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
答案 2 :(得分:1)
如果日期采用dd / mm / yyyy格式,请尝试
set dateformat dmy
select try_convert(datetime,date_col) from table
所有其他格式将显示为NULL
答案 3 :(得分:0)
你可以试试这个:
SELECT Original,
case when left(Original,2) > 12 then convert(datetime, Original, 103)
else convert(datetime, Original, 101)
end
from t1