在SQL Server中将varchar转换为date

4

这看起来是一个简单的解决方案,但我似乎无法弄清楚为什么对我不起作用。我有一个包含如下数据的列:

DateField
----------
12/16/2016
11/06/2016

我想做的就是将varchar转换为date列,但是我遇到了以下错误:

从字符字符串转换日期和/或时间时转换失败。

这是我的简单查询:

select convert (date, DateField) as convertedField 
from myTable

1
你提供的两个例子都没有问题。你的表里有一些无法转换为日期的错误日期。你使用的是哪个版本的SQL SERVER - Pரதீப்
我正在使用2012。 - moe
http://www.w3schools.com/sql/func_convert.asp - Hadi
3个回答

12

你提供的两个示例没有问题。你的表中有一些无法转换为日期的错误日期。

对于错误的日期,请使用TRY_CONVERT函数,它将返回NULL

select TRY_Convert(date,DateField)
From myTable

您应该始终将日期存储在DATE/DATETIME数据类型中。

如果您想查看无法转换为日期的记录,则

select DateField
From myTable
Where TRY_Convert(date,DateField) IS NULL

3
如果使用特定的日期格式,例如 mm/dd/yyyy,您可以在 Convert() 函数中指定它,如下所示。
CONVERT(DATETIME,DATAFIELD,101)

如果还是无法正常工作,使用TRY_CONVERT()来获取抛出此异常的行:
SELECT * 
FROM TBL 
WHERE TRY_CONVERT(DATETIME, DATAFIELD, 101) IS NULL

这将返回无法转换的行。

如果转换失败,TRY_CONVERT() 将返回 NULL

在此处了解更多关于 DateTime 格式的信息: SQL Server CONVERT() 函数教程

阅读 TRY_CONVERT MSDN 文章


你从什么时候开始必须在 Convert() 中明确指定样式? - S3S
我改变了它 :) - Hadi

0

我按照你的建议做了,但仍然出现相同的错误。 - moe
你的 dateField 的值是否全部格式都相同,还是有不同的格式? - Aatish Sai
日期的默认格式是mm-dd-yyyy,而你的格式是mm/dd/yyyy。 - Data Engineer
@enigma6205 这就是为什么在转换函数中使用第三个参数 101 来指定格式为美国日期格式。 - Aatish Sai
从什么时候开始,使用Convert()函数就必须指定样式了? - S3S
从什么时候开始,使用Convert()函数就必须指定样式了? - S3S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接