gpt4 book ai didi

tsql - 为什么 TestID 没有被转换为 INT?

转载 作者:行者123 更新时间:2023-12-01 22:44:32 24 4
gpt4 key购买 nike

开发人员和 DBA,我想我发现了 SQL 2008 R2 中的一个错误,除非你们中的任何一个人可以解释以下内容。您能否解释一下为什么在这种情况下将 TestID 转换为 NUMERIC 而不是 INT?请注意,这只是一个示例,用于向您展示我在尝试更大的东西时遇到的问题,例如一个自动化脚本,它将将从 Excel 或记事本导入的数据转换为 nvarchar/float 到适当的数据类型,int,numeric ,日期时间,varchar。

CREATE TABLE #CorruptData(
TestID VARCHAR(100)
);

GO

INSERT INTO #CorruptData
VALUES ('1'),
('2');



SELECT
CASE
WHEN TestID LIKE '[1-9]%' AND TestID NOT LIKE '0%' THEN CAST(TestID AS INT)
WHEN TestID LIKE '0%' THEN CAST(TestID AS NUMERIC(12,2))
END AS TestID


INTO #FixedData
FROM #CorruptData


SELECT *
FROM #FixedData

最佳答案

由于 CASE 语句返回类型的方式,您的 1 和 2 已转换为十进制:

CASE

Result Types Returns the highest precedence type from the set of types in result_expressions and the optional else_result_expression. For more information, see Data Type Precedence.

阅读完整文档:http://technet.microsoft.com/en-us/library/ms181765(v=sql.105).aspx

如果你真的想看到 INT,那么只需将 CASE 语句返回的任何内容转换为 INT:

CAST(CASE
WHEN TestID LIKE '[1-9]%' AND TestID NOT LIKE '0%' THEN CAST(TestID AS INT)
WHEN TestID LIKE '0%' THEN CAST(TestID AS NUMERIC(12,2))
END AS INT) AS TestID

关于tsql - 为什么 TestID 没有被转换为 INT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25569569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com