转换DOB格式

时间:2015-06-27 21:42:09

标签: sql sql-server tsql

我有一个名为NAMES的表在nvarchar中有一个DOB列,由于某种原因它不会转换为日期,只要我可以运行一段代码来转换它就可以了,这实际上更可取。所以这就是困境......有些日期是m/d/yyyy,有些是mm/dd/yyyy

示例:

2/4/1986
10/8/1999
4/24/1988
12/13/1975

我想运行一段代码将所有内容转换为标准mm/dd/yyyy格式。提前谢谢你......

2 个答案:

答案 0 :(得分:0)

尝试:

select convert(nvarchar,convert(date,dt,101),101) as dt
from   tbl;

小提琴: http://sqlfiddle.com/#!3/8faf1/7/0

如果您想转换为实际日期值,请更简单地运行:

select convert(date,dt,101) as dt
from   tbl;

答案 1 :(得分:0)

在您提到的问题中,您无法转换为正确的日期(我猜这是由于数据无效),并且您很乐意将其保留为字符值。

虽然我认为正确的操作是修复无效值并将列转换为正确的日期(时间)类型,但这可能是不可能的。

如果你真的需要"修复"然后你可以使用字符串函数进行更新:

update NAMES
set DOB = 
  case len(DOB)
    when 8 then '0' + stuff(DOB,3,0,'0')
  else 
    case charindex('/',DOB)
      when 2 then '0' + DOB
      else stuff(DOB,4,0,'0')
    end
  end
where len(DOB) < 10

Sample SQL Fiddle

请注意,它可能无法在大型数据集上获得最佳效果。