当前位置: 首页 > 面试题库 >

JOIN ON子句中的T-SQL Case语句

夹谷琨
2023-03-14
问题内容

我正在尝试在JOIN ON子句中构建case / if语句。

LEFT JOIN [CTSTRC] [Statuses] ON RIGHT([Statuses].[STRID], 3) = [CTE].[F61]

问题在于该列[Statuses].[STRID]包含文本和数字。我要与之比较的列[CTE].[F61]是一个整数。

有没有一种方法可以检测列[Statuses].[STRID]是否包含字符或数字,然后将其设置为0,然后将其设置为0?

这是一个伪查询可以帮助您:

LEFT JOIN [CTSTRC] [Statuses] 
    ON RIGHT((
        CASE [Statuses].[STRID] 
            WHEN TEXT THEN 0 
            ELSE CAST([Statuses].[STRID] AS INT) END), 3) = [CTE].[F61]

问题答案:

您正在寻找IsNumeric,但它并不总是有效(+,-和。是数字),因此您需要使用GBN所描述的解决方案,即在您的varchar中添加.0e0

LEFT JOIN [CTSTRC] [Statuses] ON 
    (CASE WHEN ISNUMERIC(RIGHT([Statuses].[STRID], 3) + '.0e0) = 1 
          THEN  CAST(RIGHT([Statuses].[STRID], 3) AS INT) 
          ELSE 0  END) = [CTE].[F61]


 类似资料:
  • T-SQL 中的 DELETE语句用于删除想要从表中删除的记录。使用 WHERE 子句和 DELETE 命令来删除选择要删除的行。如果不指定WHERE条件,那么所有记录会被删除。 语法: 我们使用 AND 或 OR 运算符组合 N 个条件。 例子: 假设 EMPLOYEES 表具有以下记录 - 示例 1: 下面的命令是删除一个 EMPLOYEES 记录的示例,其 ID 为 006 - 在执行上面语

  • T-SQL UPDATE 语句用于修改数据库中的记录。 我们使用 WHERE 子句和 UPDATE 查询来更新特定的行。否则会受到影响到所有行记录。 Update语句的语法: 带有 WHERE 子句的 UPDATE 查询的语法如下: 使用 AND 或 OR 运算符组合 N 个条件。 例子: 假设 EMPLOYEES 表具有以下记录 - 以下命令是一个示例,它将更新 ID 为 6 的客户 ADDRE

  • 在 T-SQL 中,SELECT 语句用于从数据库表中获取数据,并以结果的形式返回数据。这些表在 SELECT STATEMENT 中称为结果集。 Select语句的语法: 其中 column1、column2、column N 是要获取其值的表的字段。如果获取该表中所有可用的字段,那么需要使用给定的语法—— 例子: 考虑具有以下记录的 CUSTOMERS 表- 以下命令是一个示例,它将获取 CU

  • 在 T-SQL 中,INSERT 语句用于向表中添加新行。 INSERT INTO SELECT 需要源中的数据类型,目标匹配表。 表中的现有记录不受 INSERT 语句的影响。 语法: 以下是 的两种语法。 第一种语法: 其中 是表中的列名。 当为列添加值时,无法在 SQL 查询中指定列名。值的顺序与下面指定的顺序相同。 INSERT 语句的语法,第二种语法如下: 例子: 以下语句将在 CUST

  • Where 子句用于在从表中获取数据或将其包含在其他表中时生成条件。如果满足条件,则它从表中返回一个特定值。我们使用 WHERE 子句来过滤数据库中的记录并获取主要记录。 在 SELECT 语句中使用了 WHERE 子句,但它也用于 UPDATE、DELETE 帐户等。 语法: 我们使用逻辑运算符生成条件,它们是:、、、、 等。 下面来看一个例子,已更换的理解: 示例 请参阅具有以下记录的 EMP

  • 根据给定的表数据,第三行中的非空字段是“field1”和“field3”。因此WHERE子句将是: 我如何编写一个具有动态WHERE子句的通用SQL来满足这个需求?