【问题标题】:SQL CASE statement needs to handle TextSQL CASE 语句需要处理Text
【发布时间】:2020-02-24 10:29:58
【问题描述】:

抱歉,如果之前有人问过这个问题 - 我花了几个小时搜索但没有找到任何有用的东西。

这真的很简单 - 我被要求创建一个包含一个字段的查询,该字段在设置时(不是我)创建为 VARCHAR 而不是 INT。

我需要对此字段进行一些计算,但是一些用户一直在其中输入文本,因此计算失败,因为它无法将数据转换为 INT。

我可以在 CASE 语句中添加什么来处理有文本的地方吗?

我在想类似下面的内容,但不知道实际代码是什么:

CASE
    WHEN [Field1] IS TEXT THEN 1 ;
    ELSE [Field2] as [Chose name]
END

编辑:请注意,这是在 MS SQL Server 中。 谢谢。

【问题讨论】:

  • 顺便说一句:这是一个 CASE 表达式而不是一个语句。
  • 感谢您用无用的信息填满论坛。
  • 这不是论坛,@TomCamish,也不是无用的信息。 CASE 表达式和 Case (Switch) 语句完全不同。 Case 语句在 T-SQL 中存在;要复制他们的逻辑,您必须使用 IF...ELSE 语句。
  • SQL_Variant_Property 可用于检查列的数据类型,例如select SQL_Variant_Property( '42', 'basetype' ) as StringType, SQL_Variant_Property( 42, 'basetype' ) as NumericType;.

标签: sql sql-server string tsql case


【解决方案1】:

在 SQL Server 中,您可以为此使用 try_convert()isnull()

isnull(try_convert(int, field), 1)

try_convert() 尝试将 field 转换为 int。如果失败,则返回 null;您可以使用 isnull() 捕获它并将结果转换为 1

请注意,这仅在 field 不是 null 时有效(否则,您将得到 1)。

【讨论】:

  • 感谢您的帮助 - 效果很好。非常感激。幸运的是,如果查询已经为 NULL,我需要查询返回 1。
【解决方案2】:

在 SQL Server 中

Declare @Salary varchar(100);                                
Set @Salary = 50000;                                       
Select Case when ISNUMERIC(@Salary) = 1 then 1 
            else 0 end as [Check]

这可能会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多