T-SQL 将 VARCHAR 转换为日期

T-SQL converting VARCHAR to date

一位客户给了我一个数据库,其中包含 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" 

我收到了这条错误消息:

Conversion failed when converting date and/or time from character string.

当日期超过 12 时失败,因为 T-SQL 是美国日期格式。 例如 12/12/2021 有效但 13/12/2021 无效。

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

使用CONVERT一个样式代码。还切换到 TRY_CONVERT,当值无法转换时,它将 return 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 不是“一刀切”的数据类型;为您的数据使用正确的数据类型。