0

我在 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 先生,他正确地预测到了这一点,并在他的帮助下发现了错误。只有删除这些错误并用有效日期替换它们才能解决问题。

问候, 萨达特

4

4 回答 4

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)
于 2013-10-31T10:57:38.410 回答
2

根据您的评论,由于您确定dd/mm/yyyy列中的字符串格式 (),我怀疑您的问题可能是由于前导/尾随空格

Ltrim()用,Rtrim()Isdate()函数试试这个。如果您在 convertDate 字段中获得任何日期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
于 2013-10-31T12:09:10.557 回答
1

如果日期是 dd/mm/yyyy 格式,请尝试

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

所有其他格式将显示为 NULL

于 2013-10-31T11:12:18.887 回答
0

你可以试试这个:

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

这里有一个关于 SQLFiddle 的小演示

于 2013-10-31T11:20:53.617 回答