【问题标题】:Convert from varchar into date in SQL Server在 SQL Server 中从 varchar 转换为日期
【发布时间】:2017-01-15 02:43:02
【问题描述】:

这看起来很简单,但我似乎无法弄清楚为什么这对我不起作用。我有一列包含这样的数据:

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

我想做的就是从varchar 转换为date 列,但我收到了这个错误:

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

这是我的简单查询:

select convert (date, DateField) as convertedField 
from myTable

【问题讨论】:

  • 你给出的两个例子没有错。您的表中有一些无法转换为日期的错误日期。您使用的是哪个版本的SQL SERVER
  • 我用的是2012

标签: sql sql-server tsql sql-server-2012


【解决方案1】:

你给出的两个例子没有错。您的表格中有一些错误的日期无法转换为日期。

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

select TRY_Convert(date,DateField)
From myTable

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

如果你想查看无法转换为日期的记录,那么

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

【讨论】:

    【解决方案2】:

    如果使用特定的日期格式,例如 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() Function tutorial

    阅读TRY_CONVERT MSDN Article

    【讨论】:

    • 从什么时候开始必须使用 Convert() 指定样式?
    • 我改了:)
    【解决方案3】:

    格式化时需要指定日期时间的格式。您表中的日期当前是美国格式,因此您应该在转换函数中传递第三个参数 101。

    SELECT CONVERT(date,[DateField],101) FROM myTable;
    

    在这里工作小提琴http://rextester.com/NYKR49788

    更多关于日期时间样式的信息在这里:https://msdn.microsoft.com/en-us/library/ms187928.aspx

    【讨论】:

    • 我完全按照你的建议做了,但仍然遇到同样的错误
    • 是你所有的 dateField 值的格式相同还是格式不同
    • 日期的默认格式是 mm-dd-yyyy。你的是 mm/dd/yyyy
    • @enigma6205 这就是为什么在转换函数101 中使用第三个参数来指定格式是美国日期格式。
    • 从什么时候开始必须使用 Convert() 指定样式?
    猜你喜欢
    • 2023-03-28
    • 2010-12-03
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多