【问题标题】:Convert all values in a CHAR string column to a DATETIME?将 CHAR 字符串列中的所有值转换为 DATETIME?
【发布时间】:2019-10-31 19:09:30
【问题描述】:

我试图在一个日期值上连接两个表,但是table1 的数据类型是 DATETIME,table2 的数据类型是 CHAR。

table1.[Birthdate] = table2.[Birthdate]

我尝试了以下转换: CONVERT(datetime,RIGHT(Birthdate,4)+LEFT(Birthdatee,2)+SUBSTRING(Birthdate,3,2))

但收到 “将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”

尝试将table2 Birthdate 存储为table2 中格式化为DATETIME 的新列时,我遇到了同样的错误。

我也试过了:

CONVERT(datetime,Birthdate,23)

返回“无法绑定多部分标识符“生日”。”

  • Table1 生日值示例:1962-09-08 00:00:00.000 (datetime 数据类型)
  • Table2 生日值示例:1964-12-11(char 数据类型)

【问题讨论】:

  • 为什么要将日期存储为字符串?你应该解决这个问题。试试CONVERT(datetime,table2.Birthdate,23)
  • @Sami - “无法绑定多部分标识符“生日”。”是我运行这个时得到的响应消息。

标签: sql sql-server


【解决方案1】:

正如 Sami 在对您的问题的评论中提到的那样,您首先不应该将日期存储为字符串(varchar、nvarchar 或 char)。时期。话虽如此,您应该可以通过在 Table2 上转换为 DateTime 来加入。

它应该如下所示:

CONVERT(DateTime, BirthDate)

您的查询应如下所示:

 SELECT * 
 FROM Table1 a 
 LEFT JOIN Table2 b
 ON a.BirthDate = CONVERT(DateTime, b.BirthDate)

查看基本的 SQL Fiddle here:

【讨论】:

  • 我确实按照问题中的说明尝试过,但收到“无法绑定多部分标识符“生日”。”我同意它不应该存储为字符串,但我无法直接控制当前进入表的数据。
  • 那么您的查询是什么样的?这应该有效,除非您没有正确标记/引用您的别名,或者您没有在连接上正确引用您的表。正如 SQL 小提琴中所引用的那样,它按原样工作。
  • "TRYCONVERT" 而不是常规的 "CONVERT" 就可以了。不知道为什么...
猜你喜欢
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2021-08-08
相关资源
最近更新 更多