gpt4 book ai didi

sql - 修剪 sql 变体

转载 作者:行者123 更新时间:2023-12-02 01:21:58 27 4
gpt4 key购买 nike

我有列 sql 变体,其含义如下:100, 150, D1我正在尝试根据特定逻辑将列中的所有数字转换为字母(例如 D1)以防万一。但是 150 有空格并且 CASE WHEN 不起作用。

这是我正在使用的查询:

Select  *,
Case When LTrim(Cast(AttributeValue As NVarchar(Max))) Between 0 And 200 Then 'D1'
Else 'Other'
End
From MyTable As SCR With (NoLock);

我尝试了以下方法

LTRIM(CAST column AS VARCHAR(MAX))

但现在我得到错误:

Conversion failed when converting the nvarchar value 'D1' to data type int

如何从 sql_variant 中删除空格?

最佳答案

根据您的评论编辑为使用 BIGINT,因为数字较大,如果列不在 0 和 400 之间,则保持不变

SELECT *
,CASE
WHEN ISNUMERIC(LTRIM(CAST(AttributeValue AS NVARCHAR(MAX)))) = 1
AND CAST(LTRIM(CAST(AttributeValue AS NVARCHAR(MAX))) AS BIGINT) BETWEEN 0 AND 400 THEN 'D1'
ELSE AttributeValue
END
FROM
MyTable AS SCR WITH (NOLOCK)

您可以使用 ISNUMERIC() 函数来确定哪些 sql_variants 是整数,哪些不是。

您的代码失败的原因不是修剪,而是因为您将 VARCHAR 与 INTEGER 进行比较,因此 SQL 试图自动将您的最终字符串重新转换为整数,在 D1 的情况下,该整数不是数字所以它会导致转换错误。

另请注意,您不能在 ISNUMERIC() 函数中直接使用 sql_variant,因此请先转换为 varchar

这是一个完整的例子,向您展示它是如何工作的:

DECLARE @MyTable AS TABLE (AttributeValue SQL_VARIANT)
INSERT INTO @MyTable VALUES
(CAST(' 150' AS VARCHAR(100)))
,(CAST('D1' AS VARCHAR(100)))

SELECT *
,CASE
WHEN ISNUMERIC(LTRIM(CAST(AttributeValue AS NVARCHAR(MAX)))) = 1
AND CAST(LTRIM(CAST(AttributeValue AS NVARCHAR(MAX))) AS INT) BETWEEN 0 AND 200 THEN 'D1'
ELSE 'Other'
END
FROM
@MyTable AS SCR

关于sql - 修剪 sql 变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39576713/

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