我想将一列转换为另一列中的文本值的数据类型。
我知道我可以用 来做到这一点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 表。
预先感谢大家的帮助。