0

我想将一列转换为另一列中的文本值的数据类型。 我知道我可以用 来做到这一点exec sp_executesql,但如果没有这个我也能做到,那将是理想的。

BEGIN TRY 
    DROP TABLE #1   
END TRY 
BEGIN CATCH 
END CATCH

CREATE TABLE #1
(    
    ID INT IDENTITY,
    DataType VARCHAR(20), 
    Data VARCHAR(MAX)   
)

INSERT INTO #1  
VALUES ('DATETIME', '20150404 12:34:56.789'),
       ('DATE', '20150404'),
       ('INT', '20150404')

SELECT
    *,
    IIF(T1.DataType = 'DATETIME', CAST(T1.Data AS DATETIME), NULL) Col1,
    IIF(T1.DataType = 'DATE', CAST(T1.Data AS DATE), NULL) Col2,
    IIF(T1.DataType = 'INT', CAST(T1.Data AS INT), NULL) Col3,
    IIF(T1.DataType = 'DECIMAL(14, 6)', CAST(T1.Data AS DECIMAL(14, 6)), NULL) Col4
FROM 
    #1 T1

并有这样的事情:

SELECT
    *,
    IIF(T1.DataType = 'DATETIME', CAST(T1.Data AS T1.DataType), NULL) Col1,
    IIF(T1.DataType = 'DATE', CAST(T1.Data AS T1.DataType), NULL) Col2,
    IIF(T1.DataType = 'INT', CAST(T1.Data AS T1.DataType), NULL) Col3,
    IIF(T1.DataType = 'DECIMAL(14, 6)', CAST(T1.Data AS T1.DataType), NULL) Col4
FROM 
    #1 T1

甚至可以为每种不同的数据类型自动创建一个新列。实际上,这将被规范化,并有一个带有要引用的主键 ID 的 DataType 表。

预先感谢大家的帮助。

4

0 回答 0