将varchar转换为日期格式

时间:2013-08-12 04:56:48

标签: sql sql-server tsql type-conversion

我想将varchar(50)列转换为日期格式。我使用了以下代码:

Update [dbo].[KYCStatus062013] 
Set [REGISTRATION_DATE_]= convert(datetime,[REGISTRATION_DATE_] ,103)

但是有一个错误说:

  

消息241,级别16,状态1,行1转换时转换失败   字符串的日期和/或时间。

我想要这种格式:dd-mmm-yyyy。我没有任何选项来创建另一个表/列,因此“更新”是我可以使用的唯一方法。任何帮助将受到高度赞赏。

编辑:我的源数据如下所示:

21-MAR-13 07.58.42.870146 PM  
01-APR-13 01.46.47.305114 PM  
04-MAR-13 11.44.20.421441 AM  
24-FEB-13 10.28.59.493652 AM

编辑2:我的一些源数据还包含仅包含时间的错误数据。例如:

 12:02:24
 12:54:14
 12:45:31
 12:47:22

3 个答案:

答案 0 :(得分:2)

试试这个。

Update [dbo].[KYCStatus062013] 
Set [REGISTRATION_DATE_]= REPLACE(CONVERT(VARCHAR(11),[REGISTRATION_DATE_],106),' ' ,'-')

这将输出为dd-mmm-yyyy

如果您想要更新为日期格式,则必须修改表格。

编辑1 =

Update [dbo].[KYCStatus062013] 
    Set [REGISTRATION_DATE_]= REPLACE(CONVERT(VARCHAR(11),convert(datetime,left([REGISTRATION_DATE_],9),103),106),' ' ,'-')

编辑2 =检查此

  

http://sqlfiddle.com/#!3/d9e88/7

编辑3 =如果您只输入时间

,请选中此项
  

http://sqlfiddle.com/#!3/37828/12

答案 1 :(得分:1)

错误表明表中的某个值与103格式不匹配,无法转换。您可以使用ISDATE函数来隔离有问题的行。最终错误意味着您的表格数据不佳,这导致了我的主要担忧。为什么不使用日期时间或日期数据类型并在选择数据时使用转换样式,甚至在应用程序层更改演示文稿?这样可以防止出现您所描述的问题。

我强烈建议您更改列的数据类型,以更准确地表示存储的数据。

答案 2 :(得分:0)

PostgreSQL格式化函数提供了一组功能强大的工具,用于将各种数据类型(日期/时间,整数,浮点,数字)转换为格式化字符串,以及将格式化字符串转换为特定数据类型。

to_date(text, text)
to_date('05 Dec 2000', 'DD Mon YYYY')

有关详细信息,请单击

http://www.postgresql.org/docs/8.1/static/functions-formatting.html