【问题标题】:How to convert a column wit varchar(max) in int如何在 int 中使用 varchar(max) 转换列
【发布时间】:2020-06-29 12:47:37
【问题描述】:

我有以下问题:

我有一个表 ArticleDescription 列如下:

ID (int)            Description (varchar(max))
1                   Muller Bogen, chrome-14440416700-55
2                   Muller Bogen, chrome-14440416700-55
3                   Muller Geruchverschluss 1 1/4¨, black-11188870-00
                    Muller Ma.02 Waschtisch-Wand-Einhandbatterie ohne Ablaufgarnitur, white-12345678-08

我只想将列Description的数据类型转换为int。

我试过了:

SELECT (case when isnumeric(Description) = 1 then cast(Description as int) end)
FROM   ArticleDescription

但我收到以下消息:

Meldung 245、Ebene 16、状态 1、Zeile 20 Fehler beim Konvertieren des varchar-Werts "Dornbracht Bogen-04240418900-00" in den int-Datentyp。

【问题讨论】:

  • 行没有数据类型。有点不清楚您的数据是什么样的以及您真正想要做什么。能否将数据放入表格格式并提供适当的数据库标签?
  • 旁白:IsNumeric() 是出了名的problematicTry_Parse 更合适。
  • 你期望这个Muller Bogen, chrome-14440416700-55是什么整数?

标签: sql sql-server tsql casting varcharmax


【解决方案1】:

数据列必须全部属于同一类型。为此,您需要为其余行设置一个可接受的替代值。

declare @foo table(
    ID int,
    Description varchar(20) null
)

insert into @foo
values(1,'one')
,(2,'2')
,(3,'')
,(4,null)

select 
ID,
CASE WHEN ISNUMERIC(Description) = 1 then CAST(Description as INT) ELSE null END as [Parsed Description]
from @foo

或者您可以添加 where 子句以仅选择数字描述

select 
ID,
CAST(Description as INT)  as parsed_pescription
from @foo foo
where ISNUMERIC(Description) = 1

【讨论】:

  • 建议的解决方案结果为NULL。我在 varchar(max) 中有一个“描述”列作为数据类型。看起来像这样的数据:Muller Ma.02 Waschtisch-Wand-Einhandbatterie ohne Ablaufgarnitur,white-12345678-08。如何将这些数据转换为整数?
  • 将其转换为 int 的最大障碍是找到一种模式,以便您可以隔离要转换的部分。看看这个答案,看看它是否有帮助stackoverflow.com/questions/10443462/…
猜你喜欢
  • 2013-12-08
  • 1970-01-01
  • 2012-06-26
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多