【问题标题】:T-SQL converting VARCHAR to dateT-SQL 将 VARCHAR 转换为日期
【发布时间】:2025-12-28 07:35:07
【问题描述】:

一位客户给了我一个数据库,其中包含 VARCHAR(150) 中的所有字段。 我有一个格式为 dd/mm/yy 的日期字段,我愿意将其转换为 DATE 类型。 我发现您可以使用 CONVERT 函数来更改日期的类型,如下所示:

select convert(varchar, getdate(), 3)

给出:

30/12/06

但它仅在字段被识别为 DATE 时才有效。

我的要求是:

SELECT TOP(1000) CAST("Date" AS date) FROM "1_MVENTE" 

我有这个错误信息:

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

当一天超过 12 点时它会失败,因为 T-SQL 是预期的美国日期格式。 例如,2021 年 12 月 12 日有效,但 2021 年 13 月 12 日无效。

我不知道如何向 T-SQL 解释我的输入字段是 VARCHAR 但必须读取为日期 dd/mm/yy 才能进行转换。

【问题讨论】:

  • 在第二个查询中使用 CONVERT() 和样式 3

标签: date tsql type-conversion format


【解决方案1】:

使用CONVERT 样式代码。也切换到TRY_CONVERT,当值无法转换时,它会返回NULL,因为非常可能你的数据质量很差,所以日期无效(如'29/02/21''03/17/22''33/12/20')。样式3dd/MM/yy

SELECT TRY_CONVERT(date,[date],3)
FROM dbo.[1_MVENTE];

当然,您真正应该做的是修复您的设计。实际上存储varchar 的名为date 的列定义不是datevarchar 不是“一刀切”的数据类型;为您的数据使用正确的数据类型。

【讨论】:

  • 非常感谢它的工作:)。您的设计绝对正确,但数据库不是我的,它属于客户;这就是为什么我要尝试更改数据类型