IF-ELSE SQL语句

时间:2016-09-12 02:58:03

标签: sql sql-server-2008 tsql if-statement

我在执行此SQL语句时遇到问题。我是TSQL的新手,我不知道如何解决这个问题。每次执行此操作时,都会收到错误:

  

在上下文中指定的非布尔类型的表达式   条件是预期的,接近')'。

     

关键字'其他'附近的语法不正确。

if
SELECT Num from users where SUBSTRING(CAST(Num AS VARCHAR(6)),1,2) = 14
     print 'Batch 2014';
else
     print 'Batch 2013';

我在这里尝试做的是在我的表格中搜索所有用户' 13'作为“Num'”列中的前两个数字,然后打印“批量2014”和#39;否则'批次2013'请帮忙:)谢谢

4 个答案:

答案 0 :(得分:0)

IF EXISTS ( SELECT  Num
            FROM    users
            WHERE   SUBSTRING(CAST(Num AS VARCHAR(6)), 1, 2) = 14 ) 
    PRINT 'Batch 2014' ;
ELSE 
    PRINT 'Batch 2013' ;

答案 1 :(得分:0)

最好避免在存在时使用if-else。为什么呢?

  1. 您需要确保表格中至少有一条记录
  2. EXISTS的另一个好处是,一旦找到匹配的单个记录就会停止处理。如果您正在检查主键,这不会产生巨大影响。如果您根据另一个字段检查是否存在,它确实会产生很大的影响

    if exists (SELECT Num from users where SUBSTRING(CAST(Num AS VARCHAR(6)), 1, 2) = 14)
         print 'Batch 2014';
    else
         print 'Batch 2013';`
    

答案 2 :(得分:0)

Num的类型是什么?

IF-ELSE的语法:

-- Syntax for SQL Server, Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse  

IF Boolean_expression   
     { sql_statement | statement_block }   
[ ELSE   
     { sql_statement | statement_block } ]

所以," SELECT Num from users where SUBSTRING(CAST(Num AS VARCHAR(6)),1,2) = 14"应返回布尔值TrueFalse

IF EXISTS (SELECT Num from users where SUBSTRING(CAST(Num AS VARCHAR(6)),1,2) = 14)

答案 3 :(得分:0)

您的if条件会返回非布尔值(01的其他值),这是导致错误的原因。

如果您使用的是if .. exists,则如果表格中的任何数字满足条件SUBSTRING(CAST(Num AS VARCHAR(6)),1,2) = 14,则会打印。

如果您想查看具有批处理信息的用户,请使用CASE语句。

SELECT userid,Name -- mention the columns you wanted to select
      ,CASE WHEN SUBSTRING(CAST(Num AS VARCHAR(6)),1,2) =14 THEN 'Batch 2014' 
        ELSE 'Batch 2013' END Batch 
FROM users