检查 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 之前检查字符串是不是不是数字 [重复]

检查varchar()是否为int [duplicate]

如何在 SQL 条件中将 INT 转换为 VARCHAR [重复]

连接 Varchar 和 int [重复]

检查指针是不是为 64 字节对齐时出错 [重复]

ROLLUP 函数;将 NULL 替换为 'Total' w/列数据类型 INT 而不是 VARCHAR