检查 varchar() 是不是为 int [重复]
Posted
技术标签:
【中文标题】检查 varchar() 是不是为 int [重复]【英文标题】:Check if varchar() is an int [duplicate]检查 varchar() 是否为 int [重复] 【发布时间】:2019-03-07 16:27:37 【问题描述】:我在包含字符串和整数的第三方应用程序中继承了一个表 - 我想拆分表但想知道确定值是否为整数的最快方法?列是 varchar(250)
e.g.
Save
123456
Edit
Save
123455
Delete
123444
【问题讨论】:
@TabAlleman 我建议这是一个糟糕的副本。大多数答案都建议使用ISNUMERIC
,这实际上是一个糟糕的功能(以SELECT CASE WHEN ISNUMERIC('1.1') = 1 THEN CONVERT(int, '1.1') END;
为例)。 TRY_CONVERT
是比那里提到的更好的选择。
我知道这个问题的很多答案都是针对 2008 年的功能,但有一个答案提到在 2012+ 中使用 TRY_CONVERT()。在我看来,要做的事情是在重复的问题中为该答案添加赞成票,而不是将此重复项添加到站点,这对问题本身没有任何新的贡献。
【参考方案1】:
我建议使用TRY_CONVERT
,如果值无法转换,它将返回NULL
:
SELECT TRY_CONVERT(int, YourColumn) AS intColumn
FROM YourTable
--WHERE TRY_CONVERT(int, YourColumn) IS NOT NULL --If you only want rows that converted.
如果您更喜欢语法,也可以使用TRY_CAST
(TRY_CAST(YourColumn AS int)
)。
【讨论】:
哈哈,看来我们又发了同样的东西。 @SeanLange SO 的推送通知已被删除。直到事实发生几分钟后,我才看到发布的另一个答案。 @TimBiegeleisen 我明白你的意思。当我单击提交时,我们没有发布任何答案,但随后立即出现了另外两个。 :) 有趣的是我很快就看到了蒂姆的,但在我收到评论通知后我什至没有看到肖恩的。我必须按 F5。【参考方案2】:一种方法是使用 SQL Server 的增强型 LIKE
运算符:
SELECT col
FROM yourTable
WHERE col NOT LIKE '%[^0-9]%';
也可以选择使用TRY_CONVERT
,但前提是您使用的是更新版本的 SQL Server。
【讨论】:
【参考方案3】:我会使用TRY_CONVERT。
declare @Something table(SomeVal varchar(50))
insert @Something values
('Save')
, ('123456')
, ('Edit')
, ('Save')
, ('123455')
, ('Delete')
, ('123444')
select *
from @Something s
where TRY_CONVERT(int, s.SomeVal) is not null
【讨论】:
以上是关于检查 varchar() 是不是为 int [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在将字符串转换为 int 之前检查字符串是不是不是数字 [重复]