1

我想将 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
4

3 回答 3

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

于 2013-08-12T05:02:08.903 回答
1

该错误表明您的表中的值之一与 103 格式不匹配,无法转换。您可以使用 ISDATE 函数来隔离违规行。最终这个错误意味着你的表有错误的数据,这导致了我的主要担忧。为什么不使用 datetime 或 date 数据类型并在选择数据时使用转换样式,甚至在应用层更改表示?这将防止发生您所描述的问题。

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

于 2013-08-12T05:04:04.117 回答
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

于 2013-08-22T07:04:34.893 回答