SQL将Date数据类型从Varchar转换为Date

时间:2014-12-31 18:42:51

标签: sql sql-server date

所以我试图将我的日期列数据类型从varchar转换为date

目前我的日期格式为d/m/yyyy,我想转换为标准mm/dd/yyyy

这是我正在运行的脚本

update [table]
set [PERIOD]= CONVERT(varchar(20),cast([PERIOD] as date),101)

但我收到错误

Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.

任何提示还是我被困?

4 个答案:

答案 0 :(得分:3)

我建议您不要将一个字符串日期更新为其他格式的字符串日期,而是添加新的DATEDATETIME字段以正确存储日期。

ALTER [table] ADD Proper_Date DATE
GO
UPDATE [table]
SET Proper_Date = convert(date, [PERIOD], 103)

如果必须,您可以将上述内容包含在另一个CONVERT()

update [table]
set [PERIOD]= CONVERT(varchar(20),convert(date,[PERIOD], 103),101)

答案 1 :(得分:0)

我认为如果您可以使用子字符串或任何其他字符串函数来隔离日,月和年,那么请使用以下查询

update tableA
set period = convert(datetime,cast(day(1)as varchar)+'/'+cast(MONTH(1)as varchar)+'/2014',102)

希望它的作品。

答案 2 :(得分:0)

您可能有垃圾值,可以通过执行以下查询来获取垃圾值

SELECT [PERIOD] 
FROM YOURTABLE
WHERE ISDATE([PERIOD]) = 0

要避免垃圾值并更新其余部分,请尝试以下

update YOURTABLE
set [PERIOD]= CONVERT(varchar(20),cast([PERIOD] as date),101)
WHERE ISDATE([PERIOD]) = 1

答案 3 :(得分:-1)

试试这个。

update [table]
set [PERIOD]= CONVERT(varchar(20),CONVERT(date,[PERIOD] ,103),101)

您的查询中的问题是

cast([PERIOD] as date)

您无法直接将d/m/yyyy格式转换为date。因此,请使用103样式进行转换