【发布时间】:2019-11-24 19:40:06
【问题描述】:
我有一个带有纯文本“日期时间”的数据源,但在转换它时遇到问题。 当我尝试将其转换为各种日期格式并将其插入新表时,出现错误。
数据示例:
"18-07-2015 11:50:30am"
源表结构:
CREATE TABLE [dbo].[Conv_COMMUNICATIONEXPORT]([datetime] [varchar](255) NULL)
目标表结构:
CREATE TABLE [dbo].[TB_X_Attachment]([CreatedDate] [datetime] NULL)
插入数据出错:
Msg 242, Level 16, State 3, Line 4
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
当我运行以下选择时,最后一个转换返回错误:
SELECT CONVERT(VARCHAR(30), GETDATE(), 120) ,getdate() ,CONVERT(DATE, CONVERT(VARCHAR(40), '01-01-2000'), 120)
当我在表中运行以下内容时,成功:
INSERT INTO TB_X_Attachment (CreatedDate)
CONVERT(DATE, CONVERT(VARCHAR(30), '2000-01-01'), 120) AS WORKS
在尝试插入时,以下转换尝试均无效:
SELECT ce.[datetime] AS VARCHAR_DATETIME,
CONVERT(VARCHAR(10), CE.[datetime], 120),
CONVERT(char(10), CONVERT(VARCHAR(10), CE.[datetime], 120),120),
CONVERT(VARCHAR(10),CONVERT(char(10), CONVERT(VARCHAR(10), CE.[datetime], 120),120),120),
CONVERT(VARCHAR,(CONVERT(VARCHAR(10), CE.[datetime], 120))) ,
CONVERT(VARCHAR(10), CE.[datetime], 120)
FROM Conv_ATTACHMENTEXPORT ae
INNER JOIN Conv_COMMUNICATIONEXPORT ce
ON ae.[attachment record id] = ce.[communication id]
我认为如果我可以将输出反转为 YYYY-MM-DD,它可能会起作用。所有转换尝试都不想将格式设置为此。如何将输出反转为 YYYY-MM-DD?
【问题讨论】:
-
欢迎来到世界的另一半!如果您希望能够处理 DMY 日期,那么您可能需要先使用
SET DATEFORMAT DMY。这可能是最简单的选择,但当您也有时间组件时,您可能还需要一些额外的字符串操作才能使其正常工作。 -
使用
style 103执行convert(datetime, '18-07-2015 11:50:30am', 103) -
...或 105 -
convert(datetime, '18-07-2015 11:50:30am', 105)
标签: sql-server tsql datetime casting