【问题标题】: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()。在我看来,要做的事情是在重复的问题中为该答案添加赞成票,而不是将此重复项添加到站点,这对问题本身没有任何新的贡献。

标签: sql-server tsql


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2015-11-21
      • 1970-01-01
      • 2018-05-08
      • 2011-06-03
      • 2022-08-17
      • 2020-03-06
      • 2018-07-18
      • 1970-01-01
      • 2014-03-24
      相关资源
      最近更新 更多