如何将具有 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