如何将具有 2 种数据类型的列拆分为 2 列(sql 服务器)
How to split a column with 2 data type in 2 columns (sql server)
我有一个巨大的 .CSV 文件,其中包含有关铁人三项比赛的信息(人物、时间、国家/地区、总时间...等),所有信息都在 varchar 中...
问题是一列(Overalltime)存储了datatime和varchar类型。
例如,varchars 是 (DNS,DNF,DQ) 而数据时间是 (09:09:30)。
当我创建 table 时,我有一个这样的列:
overalltime
-------------
09:09:30
09:10:22
DNF
DNS
但我想在 table 中拆分该列以具有两列。一个带有日期时间值,另一个带有 varchar 列。
拆分该列的最佳方法是什么?
我不是专业人士,但最好的方法是在导入数据库之前将其过滤掉。您使用 .csv 文件,然后将它们拆分为一列的数据时间和 varchar 的第二列不会有问题。然后在你已经有两个单独的列时上传它
一种方法是使用 case expression 有条件地将您的值分成几列:
-- Ussing CASE to split rows into columns.
WITH SampleData AS
(
-- Provides sample data to play with.
SELECT
r.overalltime
FROM
(
VALUES
('09:09:30'),
('09:09:30'),
('DNF'),
('DNS')
) AS r(overalltime)
)
SELECT
CASE WHEN ISDATE(overalltime) = 1 THEN overalltime ELSE NULL END AS [Time],
CASE WHEN overalltime = 'DNS' THEN 1 ELSE 0 END AS DNS,
CASE WHEN overalltime = 'DNF' THEN 1 ELSE 0 END AS DNF
FROM
SampleData
;
Returns:
Time DNS DNF
09:09:30 0 0
09:09:30 0 0
NULL 0 1
NULL 1 0
我有一个巨大的 .CSV 文件,其中包含有关铁人三项比赛的信息(人物、时间、国家/地区、总时间...等),所有信息都在 varchar 中...
问题是一列(Overalltime)存储了datatime和varchar类型。 例如,varchars 是 (DNS,DNF,DQ) 而数据时间是 (09:09:30)。
当我创建 table 时,我有一个这样的列:
overalltime
-------------
09:09:30
09:10:22
DNF
DNS
但我想在 table 中拆分该列以具有两列。一个带有日期时间值,另一个带有 varchar 列。
拆分该列的最佳方法是什么?
我不是专业人士,但最好的方法是在导入数据库之前将其过滤掉。您使用 .csv 文件,然后将它们拆分为一列的数据时间和 varchar 的第二列不会有问题。然后在你已经有两个单独的列时上传它
一种方法是使用 case expression 有条件地将您的值分成几列:
-- Ussing CASE to split rows into columns.
WITH SampleData AS
(
-- Provides sample data to play with.
SELECT
r.overalltime
FROM
(
VALUES
('09:09:30'),
('09:09:30'),
('DNF'),
('DNS')
) AS r(overalltime)
)
SELECT
CASE WHEN ISDATE(overalltime) = 1 THEN overalltime ELSE NULL END AS [Time],
CASE WHEN overalltime = 'DNS' THEN 1 ELSE 0 END AS DNS,
CASE WHEN overalltime = 'DNF' THEN 1 ELSE 0 END AS DNF
FROM
SampleData
;
Returns:
Time DNS DNF
09:09:30 0 0
09:09:30 0 0
NULL 0 1
NULL 1 0