IF条件不能正常工作

时间:2016-08-24 08:02:04

标签: mysql sql sql-server if-statement

我想使用IF编写查询,但它不起作用,此查询有什么问题?

SELECT
IF(Emp.Name is not null)     
        ((Emp.Name) + '_' + (Emp.LastName)) as ID
else
   Emp.ID

我收到此错误:

Incorrect syntax near the keyword 'IF'.

为什么?

谢谢。

5 个答案:

答案 0 :(得分:4)

您可以使用CASE EXPRESSION

SELECT CASE WHEN emp.name is not null THEN emp.name + '_' + emp.lastName 
            ELSE Emp.id 
       END as [ID]
FROM ...

在SQL-Server中执行IF()的方式不同(我假设使用concat语法),

IF ( Condition ) 
    SQL STATEMENT
ELSE
    SQL STATEMENT 

这意味着您需要在每个块中执行整个选择。您的IF()用于MySQL,IF(Condition , THEN , ELSE )

答案 1 :(得分:2)

您需要在CASE子句中执行此操作:

SELECT
CASE WHEN (Emp.Name IS NOT NULL)     
    THEN ((Emp.Name) + '_' + (Emp.LastName)) 
ELSE
Emp.ID
END as ID

IF..ELSE语法略有不同:

IF(Emp.Name IS NOT NULL)    
   SELECT ((Emp.Name) + '_' + (Emp.LastName)) AS ID
ELSE
   SELECT Emp.ID AS ID

答案 2 :(得分:1)

假设它是基于语法的SQL Server,请使用:

  if [ -d $BACKUP_DIR/FULL ]; then
    mkdir $BACKUP_DIR/$YESTERDAY
    mv $BACKUP_DIR/FULL $BACKUP_DIR/$YESTERDAY 
    for dir in $BACKUP_DIR/inc*; do
      mv $BACKUP_DIR/inc* $BACKUP_DIR/$YESTERDAY 
    done
  tar -cvf $BACKUP_DIR/$YESTERDAY.tar $BACKUP_DIR/$YESTERDAY
  rm -rf $BACKUP_DIR/$YESTERDAY
  gzip $BACKUP_DIR/$YESTERDAY.tar
 fi

答案 3 :(得分:1)

在查询中尝试使用Case检查此MySQL: CASE Function

答案 4 :(得分:0)

您可以在SELECT语句中使用CASE,而不是usinf IF。像这样的东西

SELECT
  CASE Emp.Name
    WHEN NULL THEN Emp.ID
    ELSE CONCAT(CONCAT(Emp.Name,'_'),Emp.LastName)
    END AS "ID"
FROM Emp;

希望它有所帮助。