【发布时间】:2018-12-13 15:14:18
【问题描述】:
由于数据类型,我在将数据从一个表传递到另一个表时遇到问题。 我尝试将 datetimeoffset 转换为日期,并插入到我将其作为日期类型的表中,但我仍然收到此错误。 这是我拥有的日期/时间格式: 2018-12-12 13:00:00 -05:00 在一张表中,我必须节省时间并将其插入新表中。我尝试使用 ,
CAST([from] AS date) DATE_FROM
我可以将查询作为 select 运行并且它可以工作,但是当我尝试将数据插入到其他表中时,即使其他表已格式化并准备为日期类型,我仍然会遇到问题。
这是使用 datetimeoffset 存储数据的表:
[dbo].[tmp_count](
[elements_Id] [numeric](20, 0) NULL,
[content_Id] [numeric](20, 0) NULL,
[element_Id] [numeric](20, 0) NULL,
[element-name] [nvarchar](255) NULL,
[sensor-type] [nvarchar](255) NULL,
[data-type] [nvarchar](255) NULL,
[from] [datetimeoffset](0) NULL,
[to] [datetimeoffset](0) NULL,
[measurements_Id] [numeric](20, 0) NULL,
[measurement_Id] [numeric](20, 0) NULL,
[from (1)] [datetimeoffset](0) NULL,
[to (1)] [datetimeoffset](0) NULL,
[values_Id] [numeric](20, 0) NULL,
[label] [nvarchar](255) NULL,
[text] [tinyint] NULL
我正在尝试将带有 datetimeoffset 的列转换为日期和时间,并将其推送到 #tmp1 表
SELECT [elements_Id]
,[content_Id]
,[element_Id]
,[element-name]
,[sensor-type]
,[data-type]
,CAST([from] AS date) DATE_FROM
,[to]
,[measurements_Id]
,[measurement_Id]
,CAST([from (1)] AS time (0)) TIME_FROM
,CAST([to (1)] AS TIME(0)) TIME_TO
,[values_Id]
,[label]
,[text]
INTO #Tmp1
FROM [VHA].[dbo].[tmp_count]
SELECT
FROM #tmp1
这给了我 DATE_FROM 格式的时间为 2018-12-12,而 DATE_FROM 和 DATE_TO 的格式为 13:00:00,这正是我需要的。
现在我正在尝试将这张桌子与另一张桌子拼接起来,并将其推入决赛桌,如下所示:
[dbo].[tbl_ALL_DATA_N](
[serial-number] [nvarchar](255) NULL,
[ip-address] [nvarchar](255) NULL,
[name] [nvarchar](255) NULL,
[group] [nvarchar](255) NULL,
[device-type] [nvarchar](255) NULL,
[elements_Id] [numeric](20, 0) NULL,
[content_Id] [numeric](20, 0) NULL,
[element_Id] [numeric](20, 0) NULL,
[element-name] [nvarchar](255) NULL,
[sensor-type] [nvarchar](255) NULL,
[data-type] [nvarchar](255) NULL,
[DATE_FROM] [date] NULL,
[to] [datetimeoffset](0) NULL,
[measurements_Id] [numeric](20, 0) NULL,
[measurement_Id] [numeric](20, 0) NULL,
[TIME_FROM] [time](0) NULL,
[TIME_TO] [time](0) NULL,
[values_Id] [numeric](20, 0) NULL,
[label] [nvarchar](255) NULL,
[text] [tinyint] NULL
使用下面的查询:
INSERT INTO [dbo].[tbl_ALL_DATA_N]
([serial-number],
[ip-address],
[name],
[group],
[device-type],
[measurement_id],
TIME_FROM,
TIME_TO,
[content_id],
[elements_id],
[element-name],
[sensor-type],
[data-type],
DATE_FROM,
[to],
[element_id],
[measurements_id],
[values_id],
[label],
[text])
SELECT *
FROM [VHA].[dbo].[tmp_sensor_info] A
FULL OUTER JOIN #tmp1 B
ON 1 = 1
这是我收到的另一条消息:Msg 206, Level 16, State 2, Line 25 操作数类型冲突:数字与时间不兼容
有什么想法吗?
【问题讨论】:
-
您是否尝试将其转换为日期时间?
-
[From]的值是多少?而且,如果是日期,为什么不将其存储为date? -
样本数据和期望的结果会有所帮助。
-
而且我们还需要澄清源数据的数据类型、目标列的数据类型以及您收到的错误的全文。
-
日期没有格式,它们是二进制值,就像数字类型一样。该错误抱怨您尝试混合使用 datetimeoffset 和数字列。很可能,
tbl_ALL_DATA_N和tmp_sensor_info有不同的列顺序,SELECT * FROM [VHA].[dbo].[tmp_sensor_info] A以错误的顺序返回数据
标签: sql sql-server