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'
)。样式 3
是 dd/MM/yy
SELECT TRY_CONVERT(date,[date],3)
FROM dbo.[1_MVENTE];
当然,您真正应该做的是修复您的设计。根据定义,实际上存储 varchar
的名为 date
的列是 而不是 date
。 varchar
不是“一刀切”的数据类型;为您的数据使用正确的数据类型。
一位客户给了我一个数据库,其中包含 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'
)。样式 3
是 dd/MM/yy
SELECT TRY_CONVERT(date,[date],3)
FROM dbo.[1_MVENTE];
当然,您真正应该做的是修复您的设计。根据定义,实际上存储 varchar
的名为 date
的列是 而不是 date
。 varchar
不是“一刀切”的数据类型;为您的数据使用正确的数据类型。